我试图避免通过使用
在代码中乘以函数def Return_Label(self,number)
带有参数。
任何想法如何使用字符串来将变量名定义为.set
的{{1}}值?
StringVar()
答案 0 :(得分:0)
创建对象的列表,而不是为每个对象创建单独的属性。例如,
import tkinter as tk
from tkinter import *
class Window:
def __init__(self):
self.settings_window()
def Settings_Window(self):
self.settings_window = tk.Tk()
self.settings_window.minsize(200,200)
self.entries = [
Entry(self.settings_window),
Entry(self.settings_window)
]
for e in self.entries:
e.pack()
self.labelinputs = [
StringVar(),
StringVar()
]
self.labels = [
Label(self.settings_window, textvariable=label, bg='yellow')
for label in self.labelinputs
]
for l in self.labels:
l.pack(expand='yes', fill='x')
self.buttons = [
Button(self.settings_window,text='SETUP1',command=lambda: self.return_label(0))
Button(self.settings_window,text='SETUP2',command=lambda: self.return_label(1))
]
for b in self.buttons:
b.pack()
self.settings_window.mainloop()
def return_label(self,number):
entry_field_value = self.entry.get()
self.labelsinput[number].set(entry_field_value)
window=WINDOW()
答案 1 :(得分:0)
应不惜一切代价避免动态计算变量名。它们很难正确执行,并且使您的代码难以理解,难以维护和调试。
相反,将小部件存储在字典或列表中。例如:
def __init___(self):
...
self.vars = {}
...
self.vars[1] = StringVar()
self.vars[2] = StringVar()
...
def Return_Label(self,number):
self.entry_field_value = self.entry.get()
var = self.vars[number]
var.set(self.entry_field_value)
尽管如此,您实际上根本不需要使用StringVar
-它们通常只会增加额外的开销,而不会提供任何额外的价值。您可以保存标签而不是变量,然后在标签上调用configure
self.labels[1] = Label(...)
...
self.labels[number].configure(text=self.entry_field_value)
答案 2 :(得分:0)
我更喜欢使用列表方法来管理多个输入字段并更新值。 通过使用列表,您还可以使用索引值来管理标签:D。
请参见下面的示例,了解如何使用列表处理所有值和更新。
import tkinter as tk
from tkinter import *
class Window(tk.Tk):
def __init__(self):
super().__init__()
self.minsize(200, 200)
self.entry_list = []
self.label_list = []
entry_count = 2
for i in range(entry_count):
self.entry_list.append(Entry(self))
self.entry_list[i].pack()
for i in range(entry_count):
self.label_list.append(Label(self,bg='yellow'))
self.label_list[i].pack(expand='yes', fill='x')
Button(self, text='SETUP', command=self.Return_Label).pack()
def Return_Label(self):
for ndex, lbl in enumerate(self.label_list):
lbl.config(text=self.entry_list[ndex].get())
if __name__ == '__main__':
Window().mainloop()