在 tkinter 中更改框架的大小,由 class 定义

Change size of frame in tkinter, which is defined by a class

我正在尝试更改 中的框架大小;我正在使用 python 3.0,并且正在为学校项目创建库存管理类型的东西。这是我现在拥有的代码,我正在尝试编辑框架的尺寸。我试图在网上查找,但无处可找到我需要的信息。我知道您需要使用:

.geomtry()

内置函数,但我不知道把它放在哪里,或者如何使用它 class。

                import tkinter as tk

            LARGE_FONT= ("Comic Sans MS", 12)
            SMALL_FONT=('Comic sans ms', 8)

            class StockManager(tk.Tk):

                def __init__(self, *args, **kwargs):
                    tk.Tk.__init__(self, *args, **kwargs)
                    container = tk.Frame(self)

                    container.pack(side="top", fill="both", expand=True)

                    container.grid_rowconfigure(0, weight=1)
                    container.grid_columnconfigure(0, weight=1)

                    self.frames = {}

                    for F in (StartPage, PageOne):
                        frame = F(container, self)

                        self.frames[F] = frame

                        frame.grid(row=0, column=0, sticky="nsew")


                    self.show_frame(StartPage)

                def show_frame(self, cont):
                    frame = self.frames[cont]
                    frame.tkraise()


            class StartPage(tk.Frame):

                def __init__(self, parent, controller):
                    tk.Frame.__init__(self, parent)

                    lbl1 = tk.Label(self, text='Welcome to the stock manager', font=LARGE_FONT)
                    lbl1.pack(pady=10, padx=10)
                    lbl2 = tk.Label(self, text='What would you like to do?', font=LARGE_FONT)
                    lbl2.pack(pady=10, padx=10)

                    btnShowProducts = tk.Button(self, text='1. Show all products ', font=LARGE_FONT,)
                    btnShowProducts.pack(anchor='w')

                    btnSearchProducts = tk.Button(self, text='2. Search for a product ', font=LARGE_FONT)
                    btnSearchProducts.pack(anchor='w')

                    btnAddProduct = tk.Button(self, text='3. Add another product ', font=LARGE_FONT)
                    btnAddProduct.pack(anchor='w')

                    btnDeleteProduct = tk.Button(self, text='4. Delete a product ', font=LARGE_FONT)

                    btnClose = tk.Button(self, text='Close Database ', font=LARGE_FONT)
                    btnClose.pack(anchor='w')

                    btnNextPage = tk.Button(self, text='Next Page', font=SMALL_FONT)
                    btnNextPage.pack(anchor='s')


            class PageOne(tk.Frame):

                def __init__(self, parent, controller):
                    tk.Frame.__init__(self, parent)
                    label = tk.Label(self, text="Page One!!!", font=LARGE_FONT)
                    label.pack(pady=10, padx=10)

                    btnAddTrans = tk.Button(self, text='1. Add a new transaction', font=('comic sans ms', 10))  ##CREATE ADD TRANSACTION HERE

                    btnShowTrans = tk.Button(self, text='2. Show Transactions', font=('Comic Sans MS', 10))
                    btnShowTrans.pack(anchor='w')

                    button1 = tk.Button(self, text="Back to Home")
                    button1.pack()

                    button2 = tk.Button(self, text="Next Page")
                    button2.pack()

            menu = StockManager()
            menu.mainloop()

这是一个简单的示例,说明如何使用 geometry() 方法调整 window 的大小。这应该可以帮助您了解它在 class.

中的工作原理。
import tkinter as tk


class My_App(tk.Frame):

    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        # we need to set parent as a class attribute for later use
        self.parent = parent 
        button1 = tk.Button(self.parent, text="Make window larger!", command = self.make_window_bigger)
        button1.pack()

        button2 = tk.Button(self.parent, text="Make window Smaller!", command = self.make_window_smaller)
        button2.pack()

    def make_window_bigger(self):
        x = self.parent.winfo_height() + 10
        y = self.parent.winfo_width() + 10
        self.parent.geometry('{}x{}'.format(y, x))

    def make_window_smaller(self):
        x = self.parent.winfo_height() - 10
        y = self.parent.winfo_width() - 10
        self.parent.geometry('{}x{}'.format(y, x))

root = tk.Tk()
My_App(root)
root.mainloop()

如果要调整 ToplevelTk 实例的大小,可以对对象使用几何方法:

root.geometry("{}x{}+{}+{}".format(16, 32, 64, 128))
#self.geometry("{}x{}+{}+{}".format(16, 32, 64, 128))
#self.winfo_toplevel().geometry()("{}x{}+{}+{}".format(16, 32, 64, 128))

如果您指的是如何调整 Frame 的大小,您只需设置其 widthheight 选项即可:

frame = tk.Frame(root, bg='red', width=32, height=23)
#self.config(bg='red', width=32, height=23)

如果框架是 non-empty,您还应该取消设置它的传播,以禁止根据其子部件的大小要求调整大小,根据子部件使用的几何管理器执行此操作:

frame.pack_propagate(False) # discard either in accordance with the children
frame.grid_propagate(False)
#self.pack_propagate(False) # discard either in accordance with the children
#self.grid_propagate(False)