代码组织并在框架类中创建多个小部件

问题描述 投票:0回答:1

[只是在尝试整理我的代码时,我在网上发现,最好在需要时将许多代码放入类中。因此,这样做的话,我想我将尝试使用frame classcreate_labels方法创建一个create_buttons

我的目标是能够创建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个按钮。但是,没有错误,这使得很难确定,这就是为什么只有最新的按钮和框架的原因。我什至不认为这是一帧或小部件“覆盖”另一帧的情况。我认为第二帧/小部件似乎是overwriting第一帧/小部件。

感谢您的任何帮助。

python class tkinter frame code-organization
1个回答
0
投票

问题出在layout功能上。这两个帧都在gridrow=0上进行了column=0处理,因为您没有向函数传递任何特定的行和列。因此,可以看到这些帧的overwrite

代码中的另一个问题(可能)是frame_1frame_2按钮不属于Frame小部件,而是属于根window

© www.soinside.com 2019 - 2024. All rights reserved.