微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

tkinter文本小部件增加框架的大小

如何解决tkinter文本小部件增加框架的大小

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

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

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

Correct result

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

Wrong result

代码

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()

解决方法

如果您使用的是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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。