是否可以设置多个不同 tkinter 框架的窗口大小?

时间:2021-07-30 04:20:46

标签: python tkinter

我有一个 GUI,我需要不同的 tkinter 框架来具有不同的窗口大小,因为它们包含在其中。有没有办法明确设置这些框架的大小,或者相对于其中包含的内容来调整它们的大小?

2 个答案:

答案 0 :(得分:0)

您好,Kane_Iskra 有两种主要方式可以做您想做的事。

  1. 使用正确的框架放置方法
  2. 通过调整窗口大小

要将项目相对放置在框架内,您必须使用包装或网格放置方法。例如。

打包

frame1 = tk.frame(root, width=30,height=30)
frame1.pack(side='top')

网格

frame1 = tk.frame(root, width=30,height=30)
frame1.grid(row='top')

# set weights to the frame so when you resize the window the frame size changes
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

或者你也可以使用

来改变窗口的大小
root.geometry('1000x540')

答案 1 :(得分:0)

我曾经用类做过这个例子,因为你在我帖子上方的文字中写道你正在寻找这样一个例子。

如果您想动态更改窗口,place 是一个非常好的选择(当然,grid 也是可能的)。这样做的缺点是,如果您更改一个尺寸,您通常必须为另一帧更改它(但并非总是如此)。而且你必须不断地试验 rely, relx ....

from tkinter import *


class MainWindow(Tk):   
    def __init__(self, parent=None):
        super().__init__()

        self.parent = parent

    #=> your class imports:
        # toolbar:
        self.toolBar = ToolBar(self)    
        self.toolBar.place(relx=0, rely=0, relwidth=1, relheight=0.1)
        
        # main
        self.main = Main(self)
        self.main.place(relx=0, rely=0.1, relwidth=1, relheight=0.9)


class ToolBar(Frame):          
    def __init__(self, parent):
        Frame.__init__(self, bg="light blue") # you can set your frame attributes here

        self.parent = parent    # your reference to the other classes, for example (if you
        # want to communicate with class Main: self.parent.main.widget.....)


class Main(Frame):
    def __init__(self, parent):
        Frame.__init__(self, bg="light green", highlightthickness=10) # frame attributes

        self.parent = parent    # reference

        btn = Button(self, text="CloseApp", bg=self.cget("bg"), command=self.parent.destroy)    #exit button
        btn.place(relwidth=0.3, relheight=0.3, rely=0.35, relx=0.35)    # self.parent.destroy reference to you MainWindow (to destroy)


if __name__ == '__main__':  
    mw = MainWindow()
    mw.geometry("750x500")
    mw.mainloop()