簡體   English   中英

在類框架內創建多個小部件

[英]Creating multiple widgets within a class frame

在嘗試組織我的代碼時,我在網上發現最好在需要時將大部分代碼放入類中。 所以在這樣做時,我想我會嘗試使用create_labelscreate_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=0column=0上進行grid ,因為您沒有將任何特定的行和列傳遞給函數。 因此,可以看到幀的覆蓋

代碼中的另一個問題(可能)是frame_1frame_2按鈕不屬於Frame小部件,而是屬於根window

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM