我定義了一個繼承自 tk.LabelFrame 的 GeneralFrame 類,其中包含標簽和條目等其他小部件:
class GeneralFrame(tk.LabelFrame):
def __init__(self, master, eCount, lCount):
super().__init__()
self.grid(padx=5, pady=5)
self.entry_widget(eCount)
self.label_widget(lCount)
def entry_widget(self, eCount):
self.e = {}
for i in range(0, eCount):
self.e[i] = tk.Entry(self, width=6)
self.e[i].grid(row=i, column=1, sticky='w')
self.e[i].delete(0, tk.END)
def label_widget(self, lCount):
self.l = {}
for i in range(0, lCount):
self.l[i] = tk.Label(self)
self.l[i].grid(row=i, column=0, sticky='w')
如何在 TopLevel 視窗中使用此類?我已經嘗試過這樣,但它將 frame_save 放置在父視窗中而不是 TopLevel:
def openNewWindow():
newWindow = Toplevel(window)
newWindow.title('Saved Data')
newWindow.geometry('200x200')
frame_save = GeneralFrame(newWindow, eCount=5, lCount=5)
frame_save.configure(text='Saved data',font=("Helvetica",14,"bold"))
frame_save.grid(row=0, column=0)
labels_text = ['label1','label2','label3','label4','label5']
[frame_save.l[i].configure(text=labels_text[i]) for i in range(0,5)]
以及在父視窗中的一般用途:
window = tk.Tk()
window.geometry("980x500")
window.resizable(1,1)
window.title('Calculator')
class GeneralFrame(tk.LabelFrame):
[code]
frame_1 = GeneralFrame(window, eCount=5, lCount=5)
frame_2 = GeneralFrame(window, eCount=5, lCount=5)
def Frame_1():
[code]
def Frame_2():
[code]
Frame_1()
Frame_2()
window.mainloop()
uj5u.com熱心網友回復:
master呼叫時需要通過super().__init__。否則,實際框架有一個默認主視窗,默認主視窗是根視窗。
super().__init__(master)
另外,我建議你不叫self.grid里面的__init__。Tkinter的部件的設計方式,它的預期,即創建控制元件的代碼還呼叫pack,place或grid在小部件上。否則,您的課程只能在使用grid.
uj5u.com熱心網友回復:
如果我這樣做,它會起作用:
class GeneralFrame(tk.LabelFrame):
def __init__(self, master, eCount, lCount):
#super().__init__()
tk.LabelFrame.__init__(self,master)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/407817.html
標籤:
上一篇:創建多個標簽
