使用网格定位的小部件不会显示,除非我使用 Pack 购买不应该在同一类中使用网格和 Pack?

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

在下面的代码中,如果我不使用 pack(),小部件不会显示,但 grid 和 pack 不应该在同一个类中使用。不使用pack如何正确编写这个?

#!/usr/bin/python3.9

import tkinter as tk
from tkinter import ttk


class MainFrame(ttk.Frame):
    def __init__(self, container):
        super().__init__(container)

        pad={'padx': 40, 'pady': 80}

        # login button
        login_button = ttk.Button(self, text="Login")
        login_button.grid(column=0, row=0, **pad)

        login_button = ttk.Button(self, text="Login")
        login_button.grid(column=1, row=0, **pad)

        login_button = ttk.Button(self, text="Login")
        login_button.grid(column=2, row=0, **pad)

        login_button = ttk.Button(self, text="Login")
        login_button.grid(column=3, row=0, **pad)

        self.pack()

class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.geometry("1200x800")
        self.title('Login')
        self.resizable(0, 0)

if __name__ == "__main__":
    app = App()
    MainFrame(app)
    app.mainloop()
python-3.x tkinter
1个回答
0
投票

self.pack()
正在调用
MainFrame
的实例,其父窗口是根窗口。 而其他
.grid(...)
正在调用该框架内的小部件。 因此它们不在同一个容器中。

最好不要在类方法中调用

self.pack()
,因为如何布局子级是父级的工作。

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