tkinter中的帧对象没有在python中分组小部件

时间:2015-01-21 18:12:13

标签: python user-interface tkinter widget

我是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部分:

the left side of the image

第2部分:

enter image description here

在这方面,我们将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:2)

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

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