【问题标题】:tkinter resize frame and contents with main windowtkinter 使用主窗口调整框架和内容的大小
【发布时间】:2018-05-19 07:07:47
【问题描述】:

我正在尝试研究如何控制包含框架的窗口的大小调整。在代码中,我在顶部有三个按钮,它们应该保持在它们所在的位置。

当我拖动窗口以展开它时,我希望框架和它包含的文本框与主窗口一起展开。我读过columnconfigurerowconfigure 可以使用,但不知道如何实现。

from tkinter import *
from tkinter import scrolledtext

master_window = Tk()

# Create the buttons
btn_Image = Button(master_window, text='Image')
btn_Image.grid(row=1, column=1, padx=(10), pady=10, sticky=E + W)

btn_File = Button(master_window, text='File')
btn_File.grid(row=1, column=2, padx=(10), pady=10, sticky=E + W)

btn_Folder = Button(master_window, text='Folder')
btn_Folder.grid(row=1, column=3, padx=(10), pady=10, sticky=E + W)

# Group1 Frame ----------------------------------------------------
group1 = LabelFrame(master_window, text="Text Box", padx=5, pady=5)
group1.grid(row=2, column=1, columnspan=3, padx=10, pady=10, sticky=E+W+N+S)

# Create the textbox
txtbox = scrolledtext.ScrolledText(group1, width=40, height=10)
txtbox.grid(row=1, column=1,  columnspan=3, sticky=E+W+N+S)

mainloop()

【问题讨论】:

  • 稍微提一下。您不需要括号 padx=(10)。仅当您想为对象的 e 和 w 提供不同的值时才使用括号,例如使用 padx=(10, 5)。我相信你知道但想提一下以防万一。

标签: python python-3.x tkinter


【解决方案1】:

grid() 布局管理器的行号和列号从 0 开始,而不是从 1 开始(不过,开始将元素放置在任何你想要的位置并没有错,我只是提到这一点,因为你的代码给了我你认为的印象单元格从 1 开始,而不是从 0 开始)。因为我看不到开始将小部件放置在 row=1column=1 的原因,所以在下面的解决方案中,我开始放置在 0 索引处。

我建议您为有问题的 3 个按钮创建一个不同的容器 - 父小部件 - (让我们说一个 tkinter.Frame())。

代码如下:

from tkinter import *
from tkinter import scrolledtext

master_window = Tk()

# Parent widget for the buttons
buttons_frame = Frame(master_window)
buttons_frame.grid(row=0, column=0, sticky=W+E)    

btn_Image = Button(buttons_frame, text='Image')
btn_Image.grid(row=0, column=0, padx=(10), pady=10)

btn_File = Button(buttons_frame, text='File')
btn_File.grid(row=0, column=1, padx=(10), pady=10)

btn_Folder = Button(buttons_frame, text='Folder')
btn_Folder.grid(row=0, column=2, padx=(10), pady=10)

# Group1 Frame ----------------------------------------------------
group1 = LabelFrame(master_window, text="Text Box", padx=5, pady=5)
group1.grid(row=1, column=0, columnspan=3, padx=10, pady=10, sticky=E+W+N+S)

master_window.columnconfigure(0, weight=1)
master_window.rowconfigure(1, weight=1)

group1.rowconfigure(0, weight=1)
group1.columnconfigure(0, weight=1)

# Create the textbox
txtbox = scrolledtext.ScrolledText(group1, width=40, height=10)
txtbox.grid(row=0, column=0,   sticky=E+W+N+S)

mainloop()

演示:

在未拉伸时:

平均拉伸:

最大拉伸后:

【讨论】:

    【解决方案2】:

    我认为最好不要导入 tkinter 的所有内容。并且还将函数调用放到主函数中。因此,我只是将 @Billal Begueradj 的粘贴代码修改为以下内容:

    # coding: utf-8
    
    try:
        import tkinter as tk
        from tkinter import scrolledtext
    except: # Python2 compatible
        import Tkinter as tk
        from Tkinter import scrolledtext
    
    def main():
        master_window = tk.Tk()
    
        # Parent widget for the buttons
        buttons_frame = tk.Frame(master_window)
        buttons_frame.grid(row=0, column=0, sticky=tk.W+tk.E)    
    
        btn_Image = tk.Button(buttons_frame, text='Image')
        btn_Image.grid(row=0, column=0, padx=(10), pady=10)
    
        btn_File = tk.Button(buttons_frame, text='File')
        btn_File.grid(row=0, column=1, padx=(10), pady=10)
    
        btn_Folder = tk.Button(buttons_frame, text='Folder')
        btn_Folder.grid(row=0, column=2, padx=(10), pady=10)
    
        # Group1 Frame ----------------------------------------------------
        group1 = tk.LabelFrame(master_window, text="Text Box", padx=5, pady=5)
        group1.grid(row=1, column=0, columnspan=3, padx=10, pady=10, sticky=tk.E+tk.W+tk.N+tk.S)
    
        master_window.columnconfigure(0, weight=1)
        master_window.rowconfigure(1, weight=1)
    
        group1.rowconfigure(0, weight=1)
        group1.columnconfigure(0, weight=1)
    
        # Create the textbox
        txtbox = scrolledtext.ScrolledText(group1, width=40, height=10)
        txtbox.grid(row=0, column=0, sticky=tk.E+tk.W+tk.N+tk.S)
    
        master_window.mainloop()
    
    if __name__ == '__main__':
        main()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多