Python 如何使用tkinter的widget.config()修改由相同方法创建的单独小部件?
我对Python很陌生。我可以让事情顺利进行,但我从来都不确定我是否真的在使用最佳实践,所以请原谅我没有正确解释,或者我的代码没有使用最佳实践编写。我正在努力 我想知道如何使用tkinter的widget.config来修改由相同方法创建的单独的widget?例如,在下面的代码中,如何使用widget.config修改结果部分2中的文本,r2Python 如何使用tkinter的widget.config()修改由相同方法创建的单独小部件?,python,widget,tkinter,config,Python,Widget,Tkinter,Config,我对Python很陌生。我可以让事情顺利进行,但我从来都不确定我是否真的在使用最佳实践,所以请原谅我没有正确解释,或者我的代码没有使用最佳实践编写。我正在努力 我想知道如何使用tkinter的widget.config来修改由相同方法创建的单独的widget?例如,在下面的代码中,如何使用widget.config修改结果部分2中的文本,r2 from tkinter import * from tkinter.ttk import * class App(): def __init_
from tkinter import *
from tkinter.ttk import *
class App():
def __init__(self, master):
self.master = master
self.master.title('Question')
self.create_main_frame()
def create_main_frame(self):
self.main_f = Frame(self.master)
nb = Notebook(padding=5)
nb.pack(anchor='w')
self.tab1(nb)
def tab1(self, nb):
tab1_frame = Frame(nb)
nb.add(tab1_frame, text='Tab 1', underline=0)
prod_lab = Label(tab1_frame, text='Entry:')
prod_lab.grid(row=1, column=0, padx=(10,0), pady=(10,5), sticky='e')
self.product_e = Entry(tab1_frame, width=40)
self.product_e.grid(row=1, column=1, padx=(0,10), pady=(10,5))
self.button1 = Button(tab1_frame,
text="Run",
command=self.run1
)
self.button1.grid(row=2, column=1, padx=(0,10), pady=(0,10), sticky='ne')
self.results1 = self.create_result(tab1_frame, 'Results Section 1')
self.results2 = self.create_result(tab1_frame, 'Results Section 2')
self.results3 = self.create_result(tab1_frame, 'Results Section 3')
def create_result(self, frame, name):
lab_frame = LabelFrame(master=frame, text=name)
lab_frame.grid(sticky='we', padx=10, pady=10, columnspan=10)
l1 = Label(master=lab_frame, text='Result 1:')
l1.grid(sticky='e', row=0, column=0, pady=2)
l2 = Label(master=lab_frame, text='Result 2:')
l2.grid(sticky='e', row=1, column=0, pady=2)
l3 = Label(master=lab_frame, text='Result 3:')
l3.grid(sticky='e', row=2, column=0, pady=2)
r1 = Label(master=lab_frame, text='')
r1.grid(sticky='w', row=0, column=1, pady=2)
r2 = Label(master=lab_frame, text='')
r2.grid(sticky='w', row=1, column=1, pady=2)
r3 = Label(master=lab_frame, text='')
r3.grid(sticky='w', row=2, column=1, pady=2)
def run1(self):
#This is the method that will be used to find the results I need
#For the sake of this question, let's pretend I want to put whatever text is in Entry 1, into results section 2 result 2
print (self.product_e.get())
print ('How do I use "widget.config()" to modify the 3 results sections separately???')
master = Tk()
app = App(master)
master.mainloop()
非常感谢您的帮助 我的Tkinter不好,所以我会把create_结果改成class结果
这很有效。很明显,我不完全理解什么时候使用新类,什么时候使用类内的方法,什么时候使用类外的函数。需要做一些阅读!作为后续问题,是否有办法在整个方法完成之前返回results2.r2.config?在这种情况下,这并不重要,但如果每个结果集花费20秒,最好在GUI完成时用每个结果填充它,而不是等待整个方法完成。我认为这是必需的线程-第二个线程可以在后台做一些事情,然后它必须将结果发送到主线程,因为只有主线程可以使用GUI。您可以有多个线程-每个结果集一个线程。但线程更复杂。@布赖恩·奥克利。你有什么建议?你有示例代码吗?@furas:没有足够的数据来回答这个问题。这完全取决于为什么每个结果集需要20秒,以及是否可以将结果分成更小的块,或者是否可以作为单独的进程运行。在任何一种情况下,这都不能在评论框中得到回答——它应该有自己的问题。在这个网站上已经有这样的问题了。
from Tkinter import *
from ttk import *
class Results():
def __init__(self, frame, name):
self.lab_frame = LabelFrame(master=frame, text=name)
self.lab_frame.grid(sticky='we', padx=10, pady=10, columnspan=10)
self.l1 = Label(master=self.lab_frame, text='Result 1:')
self.l1.grid(sticky='e', row=0, column=0, pady=2)
self.l2 = Label(master=self.lab_frame, text='Result 2:')
self.l2.grid(sticky='e', row=1, column=0, pady=2)
self.l3 = Label(master=self.lab_frame, text='Result 3:')
self.l3.grid(sticky='e', row=2, column=0, pady=2)
self.r1 = Label(master=self.lab_frame, text='')
self.r1.grid(sticky='w', row=0, column=1, pady=2)
self.r2 = Label(master=self.lab_frame, text='')
self.r2.grid(sticky='w', row=1, column=1, pady=2)
self.r3 = Label(master=self.lab_frame, text='')
self.r3.grid(sticky='w', row=2, column=1, pady=2)
class App():
def __init__(self, master):
self.master = master
self.master.title('Question')
self.create_main_frame()
def create_main_frame(self):
self.main_f = Frame(self.master)
nb = Notebook(padding=5)
nb.pack(anchor='w')
self.tab1(nb)
def tab1(self, nb):
tab1_frame = Frame(nb)
nb.add(tab1_frame, text='Tab 1', underline=0)
prod_lab = Label(tab1_frame, text='Entry:')
prod_lab.grid(row=1, column=0, padx=(10,0), pady=(10,5), sticky='e')
self.product_e = Entry(tab1_frame, width=40)
self.product_e.grid(row=1, column=1, padx=(0,10), pady=(10,5))
self.button1 = Button(tab1_frame,
text="Run",
command=self.run1
)
self.button1.grid(row=2, column=1, padx=(0,10), pady=(0,10), sticky='ne')
self.results1 = Results(tab1_frame, 'Results Section 1')
self.results2 = Results(tab1_frame, 'Results Section 2')
self.results3 = Results(tab1_frame, 'Results Section 3')
def run1(self):
#This is the method that will be used to find the results I need
#For the sake of this question, let's pretend I want to put whatever text is in Entry 1, into results section 2 result 2
print (self.product_e.get())
print ('How do I use "widget.config()" to modify the 3 results sections separately???')
self.results1.r2.config(text='1111111111')
self.results2.r2.config(text='xxxxxxxxxx')
self.results3.r2.config(text='----------')
master = Tk()
app = App(master)
master.mainloop()