[英]Creating multiple widgets within a class frame
在嘗試組織我的代碼時,我在網上發現最好在需要時將大部分代碼放入類中。 所以在這樣做時,我想我會嘗試使用create_labels
和create_buttons
方法創建一個frame class
。
我的目標是能夠創建 2 個或更多風格相似的單獨框架(因此我覺得最好制作一個框架類)。 然后,使用方法,創建標簽、按鈕和其他小部件,並允許它們在各自的框架內輕松移動。
所以這是我的代碼:
import tkinter as tk
window = tk.Tk()
class MyFrame(tk.Frame):
def __init__(self, parent, **kwargs):
tk.Frame.__init__(self, parent)
self.parent = parent
self.layout(**kwargs)
def labels(self, text, **kwargs):
tk.Label.__init__(self, text=text)
self.layout(**kwargs)
def buttons(self, text, command, **kwargs):
tk.Button.__init__(self, text=text, command=command)
self.layout(**kwargs)
def layout(self, row=0, column=0, columnspan=None, row_weight=None, column_weight=None, color=None, sticky=None, ipadx=None, padx=None, ipady=None, pady=None):
self.grid(row=row, column=column, columnspan=columnspan, sticky=sticky, ipadx=ipadx, padx=padx, ipady=ipady, pady=pady)
self.grid_rowconfigure(row, weight=row_weight)
self.grid_columnconfigure(column, weight=column_weight)
self.config(bg=color)
frame_1 = MyFrame(window, row=0, column=0, sticky="news", color="pink")
frame_1.buttons("Btn_1/Frme_1", quit, row=0, column=0)
frame_1.buttons("Btn_2/Frme_1", quit, row=0, column=1)
frame_2 = MyFrame(window, row=1, column=0, sticky="news", color="green")
frame_2.buttons("Btn_1/Frme_2", quit, row=0, column=0)
frame_2.buttons("Btn_2/Frme_2", quit, row=0, column=1)
window.grid_columnconfigure(0, weight=1)
window.grid_columnconfigure(1, weight=1)
window.grid_rowconfigure(1, weight=1)
window.grid_rowconfigure(0, weight=1)
window.mainloop()
現在我認為我的一個問題是在__init__ method
因為每幀應該有 2 個框架和 2 個按鈕。 但是,沒有錯誤使得更難確定這就是為什么只有最新的按鈕和框架存在。 我什至不認為這是一個框架或小部件“覆蓋”另一個的情況。 我認為第二幀/小部件似乎覆蓋了第一幀/小部件。
任何幫助表示贊賞。
問題在於您的layout
功能。 兩個框架都在row=0
和column=0
上進行grid
,因為您沒有將任何特定的行和列傳遞給函數。 因此,可以看到幀的覆蓋。
代碼中的另一個問題(可能)是frame_1
和frame_2
按鈕不屬於Frame
小部件,而是屬於根window
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.