【问题标题】:tkinter text widget increasing size of frametkinter 文本小部件增加框架的大小
【发布时间】:2020-08-26 21:36:50
【问题描述】:

我正在尝试为我正在制作的应用程序创建一个 GUI,但由于某种我无法弄清楚的原因,message_space 框架内的文本小部件正在增加 message_space 框架的大小并减少friends_space 框架的大小。我希望friends_space 框架占据窗口大小的 1/4,而 message_space 框架占据窗口大小的剩余 3/4ts。

红色是friends_space 框架,蓝色是message_space 框架。

这就是我想要的框架大小。

这就是我添加文本框时发生的情况。

代码

from tkinter import *
class app:
    def __init__(self, master):
        self.master = master

        master.title("PyChat")
        master.geometry("800x500")
        master.configure(bg="grey")
        master.resizable(0, 0)
        master.grid_columnconfigure(0, weight=1)
        master.grid_columnconfigure(1, weight=3)
        master.grid_rowconfigure(0, weight=1)

        self.friends_space = Frame(master, bg="red")
        self.friends_space.grid(row=0, column=0, sticky=NSEW)

        self.chat_space = Frame(master, bg="blue")
        self.chat_space.grid(row=0, column=1, columnspan=3, sticky=NSEW)

        self.message_area = Text(self.chat_space)
        self.message_area.grid(row=0, column=0)


root = Tk()
my_gui = app(root)
root.mainloop()

【问题讨论】:

  • weight= 选项通常控制 额外空间 的分布,超出了在行/列中保存小部件所需的最小值 - 请注意,右侧的蓝色区域文本的宽度正好是红色区域的 3 倍。您需要添加一个 uniform= 选项,两列的值相同(确切的值无关紧要) - 当它生效时,宽度与权重严格成比例。
  • @jasonharper 我对在哪里添加 uniform= 选项有点困惑。我是 tkinter 的新手。
  • 它将进入.grid_columnconfigure() 调用(或.grid_rowconfigure(),但你不需要它)。

标签: python-3.x tkinter


【解决方案1】:

如果您使用grid,则将您的 UI 分成四个等宽的列(使用uniform 选项),然后让文本小部件跨越三个。

您还应该从一个可以增长到空间中的小文本小部件开始。否则 tkinter 将尝试保留大尺寸并开始从其他小部件中删除空间以尝试使所有内容都适合。

这是一个基于您的原始代码的示例。但是,我将pack 用于文本小部件而不是grid,因为它需要更少的代码行。我还对代码进行了一些重组。我发现将对grid 的调用分组在一起使布局更容易理解。

我还取消了调整大小的限制。限制用户调整窗口大小的能力很少有好主意。此外,它还可以让您看到生成的 UI 是响应式的。

from tkinter import *
class app:
    def __init__(self, master):
        self.master = master

        master.title("PyChat")
        master.geometry("800x500")
        master.configure(bg="grey")

        master.grid_columnconfigure((0,1,2,3), uniform="uniform", weight=1)
        master.grid_rowconfigure(0, weight=1)

        self.friends_space = Frame(master, bg="red")
        self.chat_space = Frame(master, bg="blue")

        self.friends_space.grid(row=0, column=0, sticky=NSEW)
        self.chat_space.grid(row=0, column=1, columnspan=3, sticky=NSEW)

        self.message_area = Text(self.chat_space, width=1, height=1)
        self.message_area.pack(fill="both", expand=True)


root = Tk()
my_gui = app(root)
root.mainloop()

【讨论】:

    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2011-05-13
    • 1970-01-01
    相关资源
    最近更新 更多