第一次使用TkInter。根据我读过的内容,您可以使用Frame小部件来保存其他小部件。所以,我放下了一些预览框架:
import tkinter as tk
root = tk.Tk()
TextFrame = tk.Frame(root, width=200, height=600, bg="red")
TextFrame.pack(side="left")
ListFrame = tk.Frame(root, width=800, height=600, bg="blue")
ListFrame.pack(side="right")
但是,当我添加一个小部件并告诉它填充框架时,它只是替换框架而不是扩展以填充区域。使用的测试代码:
ListBox = tk.Listbox(ListFrame, selectmode="single", bg="#545454", fg="#d9d9d9")
for X in range(20):
ListBox.insert('end', X)
ListBox.pack(fill='both', expand=True)
如果我将父级设置为主“root”对象,则相同的测试代码会正确扩展。例如:
import tkinter as tk
root = tk.Tk()
root.geometry("1000x600")
ListBox = tk.Listbox(root, selectmode="single", bg="#545454", fg="#d9d9d9")
for X in range(20):
ListBox.insert('end', X)
ListBox.pack(side="right", fill='both', expand=True)
TextBox = tk.Message(root, text="A bunch of text", width=100)
TextBox.pack(side="left", fill="y")
我做错了什么,这里?
答案 0 :(得分:0)
框架就像弹性体,它们抓住它们的内容。 你可以添加:
ListFrame.pack_propagate(False)
关闭该行为
答案 1 :(得分:0)
不可能说出正确答案是什么,因为你的问题并没有准确解释你想要达到的外观和行为。
默认情况下,窗口小部件缩小或展开以适合其内容。 99.9%的时间这是正确的事情,并允许对响应非常敏感的UI(不同的字体,不同的分辨率,不同的窗口大小等)。在您的情况下,列表框不会替换框架。相反,框架只是缩小以适应列表框。
这样做是因为你没有告诉它做任何不同的事情。当您将框架放在根窗口中时,您没有告诉tkinter您希望框架填满窗口。你只是让它漂浮在顶部,这使它可以自由地增长或缩小以适应其内容。
通过为TextFrame.pack(side="left")
提供适当的属性,您可以让该框架填充窗口,从而防止它缩小以适合其子项。
TextFrame.pack(side="left". fill="both", expand=True)
当然,假设您希望框架(以及它包含的文本小部件)填充窗口。如果您在其周围放置其他窗口,则可能会更改您要使用的选项。