繁体   English   中英

Tkinter中的框架对象未在Python中分组小部件

[英]Frame object in tkinter not grouping widgets in python

我是python新手,刚开始使用'tkinter'模块。 我试图使用从“框架”对象继承的自定义类之一将不同的小部件组合在一起,成为一个全新的小部件,并希望垂直堆叠4个这样的新小部件。

每个新窗口小部件均包含1个“标签”,3个“条目”窗口小部件和2个“按钮”窗口小部件(在4个新窗口小部件中,按钮窗口小部件分别具有不同的用途)。

为了垂直排列它们,我使用了不带参数的'pack()'方法。 问题在于,我不是以垂直的方式将所有6个旧窗口小部件以“分组”方式放置在新窗口小部件中,而是得到了一种“倾斜”的显示方式,其中所有按钮彼此“混合”了(所有装箱价值为“左”的小部件首先显示,而装箱价值为“右”的小部件随后显示)。

这是我的类“ OperationPanel”的一部分(实际的类太大而无法显示,但存在诸如减法之类的其他操作,并且还存在与按钮链接的所有功能):

  class OperationPanel(Frame):
def __init__(self, app, operation):
    Frame.__init__(self, app)
    if operation == "addition":
        Label(app, text="Addition:").pack()
        self.num1 = Entry(app)
        self.num1.pack(side = LEFT)
        self.num2 = Entry(app)
        self.num2.pack(side = LEFT)
        self.disp = Entry(app)
        self.disp.pack(side = LEFT)
        Button(app, text="Reset", command=self.reset_add).pack(side = RIGHT)
        Button(app, text="Add!",  command=self.calc_add).pack(side = RIGHT)

    elif operation == "subtraction":
        Label(app, text="Subtraction:").pack()
        self.num1 = Entry(app)
        self.num1.pack(side = LEFT)
        self.num2 = Entry(app)
        self.num2.pack(side = LEFT)
        self.disp = Entry(app)
        self.disp.pack(side = LEFT)
        Button(app, text="Reset", command=self.reset_sub).pack(side = RIGHT)
        Button(app, text="Subtract!", command=self.calc_sub).pack(side = RIGHT)

    elif operation == "multiplication":
        Label(app, text="Multiplication:").pack()
        self.num1 = Entry(app)
        self.num1.pack(side = LEFT)
        self.num2 = Entry(app)
        self.num2.pack(side = LEFT)
        self.disp = Entry(app)
        self.disp.pack(side = LEFT)
        Button(app, text="Reset", command=self.reset_mul).pack(side = RIGHT)
        Button(app, text="Multiply!",  command=self.calc_mul).pack(side = RIGHT)

    elif operation == "division":
        Label(app, text="Division:").pack()
        self.num1 = Entry(app)
        self.num1.pack(side = LEFT)
        self.num2 = Entry(app)
        self.num2.pack(side = LEFT)
        self.disp = Entry(app)
        self.disp.pack(side = LEFT)
        Button(app, text="Reset", command=self.reset_div).pack(side = RIGHT)
        Button(app, text="Divide!",  command=self.calc_div).pack(side = RIGHT)

...

这是我对OperationPanel对象的调用:

OperationPanel(app, "addition").pack()
OperationPanel(app, "subtraction").pack()
OperationPanel(app, "multiplication").pack()
OperationPanel(app, "division").pack()

这是GUI现在的外观:

第1部分:

图片的左侧

第2部分:

在此处输入图片说明

在这方面的任何帮助将不胜感激。 提前致谢!

看起来您正在使用app的父级创建所有小部件。 他们的父母应该是self

if operation == "addition":
    Label(app, text="Addition:").pack()
    self.num1 = Entry(self)
    ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM