我正在使用Tkinter在GUI中使用GUI构建一个计划程序。
我基本上遇到与this question相同的问题:日程表上的标签不会被替换;另一个人名列前茅。但是,由于我动态创建表格,因此我没有标签的变量名称。
那么我还可以在没有变量名的情况下更新标签小部件的文本值吗? StringVar有没有办法做到这一点?或者我该如何正确刷新表格?
Matcher
答案 0 :(得分:1)
解决方案是创建标签小部件一次,保存对每个小部件的引用,然后更改小部件而不是创建新的小部件。
由于您似乎正在构建类似于表的结构,因此使用(行,列)元组将小部件存储在字典中。例如:
#(Re)Build schedule on screen
def BuildSchedule():
global widgets
widgets = {}
for r in range(1,4):
label = Label(ScheduleFrame, text=stafflist[r-1].name)
label.grid(row=r, column=0)
widgets[(r,0)] = label
for c in range(1,15):
label = Label(ScheduleFrame, text=weekdays[(c-1)%7])
label.grid(row=0, column=c)
widgets[(0,c)] = label
for r in range(1,4):
for c in range(1,15):
label = Label(ScheduleFrame, text=scheduleDictionary[r-1][c-1])
label.grid(row=r, column=c)
widgets[(r,c)] = label
稍后,您可以使用configure
更改标签。例如,要更改第1行第10列的标签,您可以执行以下操作:
widgets[(1,10)].configure(text="the new text")
答案 1 :(得分:-1)
您应始终指定带有名称的标签,如果您想更改或更新标签的值,请使用config()
import tkinter
from tkinter import *
#DATA
class Staff(object):
def __init__(self, name, ID):
self.name = name #this data comes from storage
self.ID = ID #this is for this instance, starting from 0 (for use with grid)
ID42 = Staff("Joe", 0)
ID25 = Staff("George", 1)
ID84 = Staff("Eva", 2)
stafflist = [ID42, ID25, ID84]
weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
scheduleDictionary = {}
for r in range(0,3):
scheduleDictionary[r] = ['shift','shift','shift','shift','shift','shift','shift','shift','shift','shift','shift','shift','shift','shift']
#Build window
root = Tk()
ScheduleFrame = Frame(root)
ScheduleFrame.pack()
#(Re)Build schedule on screen
def BuildSchedule():
for r in range(1,4):
abcd = tkinter.Label(ScheduleFrame, text=stafflist[r-1].name).grid(row=r, column=0)
for c in range(1,15):
efgh = tkinter.Label(ScheduleFrame, text=weekdays[(c-1)%7]).grid(row=0, column=c)
for r in range(1,4):
for c in range(1,15):
ijkl = tkinter.Label(ScheduleFrame, text=scheduleDictionary[r-1][c-1]).grid(row=r, column=c)
如果您要更新标签,请使用config()
或set()
微小的更改,只需命名每个变量,您可以根据需要进行更改。