tkinter 标签文本变量不显示
tkinter label textvariable not showing
我正在使用 python 3.7 和 tkinter。
我想显示定期更新的文本信息,我想以 table 格式显示它,其中每个单元格的宽度都是固定的。无需赘述太多细节,我使用的是网格几何管理器。不幸的是,文本没有显示在单元格中,我不知道为什么。
我明白我的 "table"-like GUI 的构造并不像它应该的那么简单。我希望能够轻松 hide/show 行,因此我为每一行提供了自己的框架,以便于 show/hide 任何行。 (我也在每一行中使用了网格布局,认为这将是最终强制几何管理器给我 uniform/non-changing 单元格宽度的最简单方法。)
我的第一个问题是 "table" 中的标签中没有显示任何文本。
我已通过 print('label text = ', label.cget("textvariable"))
验证,正确的文本变量实际上已分配给标签。
我已经阅读了很多关于 "tkinter label text not showing" 的帖子,但没有任何帮助。
感谢您的任何见解。这是代码:
driverList = ['bob','fred','ethel']
tracks = ['daytona', 'charlotte', 'atlanta', 'darlington','lasvegas','watkins','talladega']
dynamicAllDriverFlagReportDict = {'bob': ['bob','i','','RevDn','','','',''],
'fred': ['fred','In-Up','','','','RevUp','Ham',''],
'ethel': ['ethel','','RevDn','','','In-Dn','Sht','']
}
global driverFrameDict
driverFrameDict= dict()
# Set up the GUI
window = tk.Tk()
myDataFrame = tk.Frame(master=window)
myDataFrame.pack()
btnFrame= tk.Frame(master=window, bg="gray")
btnFrame.pack(side="bottom")
for driverIndex in range(len(driverList)):
myOneStockFrame = tk.Frame(master=myDataFrame, height=25, width=800)
for tfIndex in range(len(tracks)+1):
oneTFFrame = tk.Frame(master=myOneStockFrame,relief=tk.RAISED, borderwidth=1)#, height=25)#, width=8)
if tfIndex == 0:
label = tk.Label(master=oneTFFrame,text=driverList[driverIndex])#, height=15, width=8)
else:
print('driverIndex=', driverIndex, '; tfIndex=', tfIndex, 'dynamicAllDriverFlagReportDict=', dynamicAllDriverFlagReportDict[driverList[driverIndex]][tfIndex])
label = tk.Label(master=oneTFFrame,textvariable=dynamicAllDriverFlagReportDict[driverList[driverIndex]][tfIndex])#,height=20)#, width=8)
print('label text = ', label.cget("textvariable"))
label.pack()#padx=5,pady=5)
#label.pack_propagate(0)
oneTFFrame.grid(row=0,column=tfIndex)#, sticky= "nswe", padx=0, pady=0)
#oneTFFrame.grid_propagate(0)
myOneStockFrame.grid(row=driverIndex,column=0)#, sticky= "nswe", padx=0, pady=0)
#myOneStockFrame.grid_propagate(0)
driverFrameDict[driverList[driverIndex]] = myOneStockFrame
#print('driverFrameDict['+driverList[driverIndex]+'] = ', myOneStockFrame)
window.mainloop()
这是输出:
谢谢。
textvariable
必须设置为特殊 tkinter 变量之一的实例(StringVar
,等等)。您正在传递一个字符串,这会导致使用与该字符串匹配的名称创建一个新的内部变量。
我正在使用 python 3.7 和 tkinter。
我想显示定期更新的文本信息,我想以 table 格式显示它,其中每个单元格的宽度都是固定的。无需赘述太多细节,我使用的是网格几何管理器。不幸的是,文本没有显示在单元格中,我不知道为什么。
我明白我的 "table"-like GUI 的构造并不像它应该的那么简单。我希望能够轻松 hide/show 行,因此我为每一行提供了自己的框架,以便于 show/hide 任何行。 (我也在每一行中使用了网格布局,认为这将是最终强制几何管理器给我 uniform/non-changing 单元格宽度的最简单方法。)
我的第一个问题是 "table" 中的标签中没有显示任何文本。
我已通过 print('label text = ', label.cget("textvariable"))
验证,正确的文本变量实际上已分配给标签。
我已经阅读了很多关于 "tkinter label text not showing" 的帖子,但没有任何帮助。 感谢您的任何见解。这是代码:
driverList = ['bob','fred','ethel']
tracks = ['daytona', 'charlotte', 'atlanta', 'darlington','lasvegas','watkins','talladega']
dynamicAllDriverFlagReportDict = {'bob': ['bob','i','','RevDn','','','',''],
'fred': ['fred','In-Up','','','','RevUp','Ham',''],
'ethel': ['ethel','','RevDn','','','In-Dn','Sht','']
}
global driverFrameDict
driverFrameDict= dict()
# Set up the GUI
window = tk.Tk()
myDataFrame = tk.Frame(master=window)
myDataFrame.pack()
btnFrame= tk.Frame(master=window, bg="gray")
btnFrame.pack(side="bottom")
for driverIndex in range(len(driverList)):
myOneStockFrame = tk.Frame(master=myDataFrame, height=25, width=800)
for tfIndex in range(len(tracks)+1):
oneTFFrame = tk.Frame(master=myOneStockFrame,relief=tk.RAISED, borderwidth=1)#, height=25)#, width=8)
if tfIndex == 0:
label = tk.Label(master=oneTFFrame,text=driverList[driverIndex])#, height=15, width=8)
else:
print('driverIndex=', driverIndex, '; tfIndex=', tfIndex, 'dynamicAllDriverFlagReportDict=', dynamicAllDriverFlagReportDict[driverList[driverIndex]][tfIndex])
label = tk.Label(master=oneTFFrame,textvariable=dynamicAllDriverFlagReportDict[driverList[driverIndex]][tfIndex])#,height=20)#, width=8)
print('label text = ', label.cget("textvariable"))
label.pack()#padx=5,pady=5)
#label.pack_propagate(0)
oneTFFrame.grid(row=0,column=tfIndex)#, sticky= "nswe", padx=0, pady=0)
#oneTFFrame.grid_propagate(0)
myOneStockFrame.grid(row=driverIndex,column=0)#, sticky= "nswe", padx=0, pady=0)
#myOneStockFrame.grid_propagate(0)
driverFrameDict[driverList[driverIndex]] = myOneStockFrame
#print('driverFrameDict['+driverList[driverIndex]+'] = ', myOneStockFrame)
window.mainloop()
这是输出:
谢谢。
textvariable
必须设置为特殊 tkinter 变量之一的实例(StringVar
,等等)。您正在传递一个字符串,这会导致使用与该字符串匹配的名称创建一个新的内部变量。