簡體   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