【问题标题】:Tkinter Grid Geometry Resizing issueTkinter 网格几何调整大小问题
【发布时间】:2021-05-05 03:30:43
【问题描述】:

在调整窗口大小时,右侧面板中的浏览按钮被分开。我希望整个事物保持在一起并平等调整大小。

import tkinter as tk
from tkinter import ttk
from tkinter import *

class AppLayout(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        
        
        self.masterPane = tk.PanedWindow(self )
        self.leftPane   = tk.Frame(self.masterPane,relief = 'raised',bg='black',width =100)
        self.masterPane.add(self.leftPane)
        
        self.rightPane   = tk.Frame(self.masterPane)
        self.masterPane.add(self.rightPane)
        
        self.masterPane.pack(fill = 'both',expand = True)
        


        name_entry    = tk.Entry(self.rightPane,font =('calibre',10,'normal'))
        Browse_Button = tk.Button(self.rightPane,text = 'Browse')
        Upload_Button = tk.Button(self.rightPane,text = 'Upload')
        
        name_entry.grid(row=1,column=1)
        Browse_Button.grid(row=1,column=2)
        Upload_Button.grid(row=1,column=1,pady =(50,0))
        

        self.rightPane.columnconfigure(1, weight=1)
        self.rightPane.rowconfigure(1, weight=1)


app = AppLayout()
app.mainloop()

【问题讨论】:

  • name_entry.grid(...) 中添加sticky="e"(或“ew”)。 Upload_Button 应该放在第 2 行吗?
  • “等量调整大小”是什么意思?例如,如果我使窗口更宽,条目小部件是否应该变得更宽?或者,它和按钮是否应该保持相同的大小和位置,在浏览器按钮的右侧有一堆空白?
  • 从“同等调整大小”我的意思是,当窗口被拉伸时,它应该通过保持与左右边框的距离相等而保持在中心,同时文件对话框的大小也应该增加。不,我不希望按钮大小发生变化。

标签: python-3.x tkinter tkinter-layout


【解决方案1】:

你需要改变四件事:

  • 不要双重导入 tkinter。从中导入 * 就足够了。
  • 将 rightPane 的第二列配置为在调整窗口大小时扩展。
  • 通过将sticky=W 添加到.grid() 方法,将按钮放在第二列的西侧(W)。
  • 将 Entry 小部件粘贴到第 1 列的东侧和西侧。因此,当此列扩展时,它会变宽。

使用以下代码,它可以工作。 您还可以在框架小部件上使用 .colmnconfigure().rowconfigure() 方法来指定其他窗格如何扩展以及应用如何垂直调整大小。

from tkinter import ttk
from tkinter import *

class AppLayout(Tk):
    def __init__(self):
        Tk.__init__(self)

        self.masterPane = PanedWindow(self )
        self.leftPane   = Frame(self.masterPane,relief = 'raised',bg='black',width =100)
        self.masterPane.add(self.leftPane)
        
        self.rightPane   = Frame(self.masterPane)
        self.rightPane.columnconfigure(2, weight=1)
        self.masterPane.add(self.rightPane)
        
        self.masterPane.pack(fill = 'both',expand = True)
        
        name_entry    = Entry(self.rightPane,font =('calibre',10,'normal'))
        Browse_Button = Button(self.rightPane,text = 'Browse')
        Upload_Button = Button(self.rightPane,text = 'Upload')
        
        name_entry.grid(row=1,column=1,sticky=W+E)
        Browse_Button.grid(row=1,column=2, sticky=W)
        Upload_Button.grid(row=1,column=1,pady =(50,0))

        self.rightPane.columnconfigure(1, weight=1)
        self.rightPane.rowconfigure(1, weight=1)


app = AppLayout()
app.mainloop()

【讨论】:

  • 感谢您的回复和建议马丁。如何将整个东西保持在小部件的中心?目前,文件对话框粘在左边框上。
  • 快速解决方法是使第 0 列可扩展(self.rightPane.columnconfigure(0, weight=1)),因此,当窗口被拉伸时,条目左侧的部分将扩展。但最好将 Entry 小部件和按钮放在一个框架中,然后将其放置在第 1 列的中心。
  • 感谢您的快速回复。感谢您的帮助...它奏效了。 :)
猜你喜欢
  • 2010-11-29
  • 2014-06-27
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 2017-04-07
  • 2021-01-22
  • 2021-09-26
  • 1970-01-01
相关资源
最近更新 更多