Python 是否可以直接从存储的tkinter小部件引用变量?
这里是堆栈的新成员,正在寻找一点帮助,解决我的一个小型Python项目遇到的一个问题。我目前正在尝试使用tkinter库创建一个GUI,它能够根据用户的意愿动态添加(和稍后删除)新字段。我在读取连接到单选按钮小部件的变量的状态时遇到了一个问题,因为我不必直接访问变量本身,只需要访问小部件 为了更好地解释我的情况,我将包括我的代码。下面是此项目的基类,详细介绍了窗口对象的创建: (请注意,我对Python相当陌生,因此请原谅任何糟糕或次优的Python语法!) 在主窗口中创建的“fieldButton”用于动态创建包含一对单选按钮的字段,每个单选按钮都链接到同一个整数变量。“checkButton”应检查链接到每个字段单选按钮的变量的状态 以下代码片段是用于创建新字段的函数的定义。所有元素都打包到一个框架中,整个框架存储为类变量“frames”的一个成员。整数变量“rbVar”是为每个新帧在本地定义的,并且是我稍后要引用的变量:Python 是否可以直接从存储的tkinter小部件引用变量?,python,tkinter,Python,Tkinter,这里是堆栈的新成员,正在寻找一点帮助,解决我的一个小型Python项目遇到的一个问题。我目前正在尝试使用tkinter库创建一个GUI,它能够根据用户的意愿动态添加(和稍后删除)新字段。我在读取连接到单选按钮小部件的变量的状态时遇到了一个问题,因为我不必直接访问变量本身,只需要访问小部件 为了更好地解释我的情况,我将包括我的代码。下面是此项目的基类,详细介绍了窗口对象的创建: (请注意,我对Python相当陌生,因此请原谅任何糟糕或次优的Python语法!) 在主窗口中创建的“fieldButt
def addFrame(self):
newFrame = tk.Frame(self.window)
rbVar = tk.IntVar(newFrame, 0)
rb1 = tk.Radiobutton(newFrame, text='RB_L', variable=rbVar, value=1)
rb1.grid(row=0, column=0)
rb2 = tk.Radiobutton(newFrame, text='RB_R', variable=rbVar, value=2)
rb2.grid(row=0, column=1)
newFrame.grid(row=self.yPos, sticky='ew')
self.frames.append(newFrame) # store frame for later reference
self.yPos += 1
最后,假设“check”函数只是检索属于每个帧的变量状态(这里,为了示例,它只是简单地打印出来)
我曾尝试使用get()
和cget()
方法,但从winfo_children()
函数返回的信息似乎是字符串(与该方法不兼容)。当检查列表中第一个元素的属性info[0]
时,我已经确认它确实是单选按钮,它是用变量PY#(其中“#”是一个递增的整数)参数化的。任何直接引用该变量的尝试(例如,使用getvar(name='PY#VAR')
方法)都会导致编译器告诉我该名称的变量不存在,即使我使用的是直接从小部件读取的变量名
即使在tkinter文档中,我也没有找到解决方案。希望有人能给我一个正确的方向推 您可以将变量添加到帧的属性中:
def addFrame(self):
newFrame = tk.Frame(self.window)
rbVar = tk.IntVar(newFrame, 0)
rb1 = tk.Radiobutton(newFrame, text='RB_L', variable=rbVar, value=1)
rb1.grid(row=0, column=0)
rb2 = tk.Radiobutton(newFrame, text='RB_R', variable=rbVar, value=2)
rb2.grid(row=0, column=1)
newFrame.grid(row=self.yPos, sticky='ew')
newFrame.rbVar = rbVar # save the variable
self.frames.append(newFrame) # store frame for later reference
self.yPos += 1
然后在检查()中访问它:
您可以直接使用rbVar.get()
检索该值。
def check(self):
for unit in self.frames:
info = unit.winfo_children() # gather the widget info belonging to each frame
var = info[0]['variable'].get() # !PROBLEM! trying to retrieve variable
print(var)
if (__name__=='__main__'):
w = newWindow() # main program, calling new window instance
def addFrame(self):
newFrame = tk.Frame(self.window)
rbVar = tk.IntVar(newFrame, 0)
rb1 = tk.Radiobutton(newFrame, text='RB_L', variable=rbVar, value=1)
rb1.grid(row=0, column=0)
rb2 = tk.Radiobutton(newFrame, text='RB_R', variable=rbVar, value=2)
rb2.grid(row=0, column=1)
newFrame.grid(row=self.yPos, sticky='ew')
newFrame.rbVar = rbVar # save the variable
self.frames.append(newFrame) # store frame for later reference
self.yPos += 1
def check(self):
for unit in self.frames:
val = unit.rbVar.get()
print(val)