【发布时间】:2020-11-26 13:25:51
【问题描述】:
刚开始学习 tkinter,我正在处理网格管理。 我将 a 框架设置为第 0 列的权重为 1,因此我希望 label1 被拉伸到框架的末尾,然后将 label2 添加到第 1 列,长度相对于其文本大小。
预期输出:https://gyazo.com/65cf907e2cdea07d08844bdc8c62c7b2
输出:https://gyazo.com/3c9e9c9f86372e01e96283545387c51e
这是我的代码:
import tkinter as tk
class App(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, *kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
frame_list = (MenuFrame,
)
self.geometry("1024x768")
self.frames = {}
for F in frame_list:
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame("MenuFrame")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
class MenuFrame(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.create_widgets(self)
def create_widgets(self, parent):
frame = tk.Frame(self, bg="white")
frame.grid_columnconfigure(0, weight=1)
frame.grid_rowconfigure(0, weight=1)
label1 = tk.Label(frame, text="Label one", bg="red")
label2 = tk.Label(frame, text="Label two", bg="blue", fg="white")
frame.grid(row=0, column=0, sticky="nsew")
label1.grid(row=0, column=0)
label2.grid(row=0, column=1)
if __name__ == "__main__":
app = App()
app.mainloop()
【问题讨论】:
-
@Abrar 感谢您的评论,我实际上正在寻找一种使用权重拉伸 label1 的方法,而不是通过 width 参数手动更改其宽度。
-
@Abrar,不完全是,有关我想要做什么的更多信息,请查看这个问题! stackoverflow.com/questions/45847313/…基本上,如果初始窗口宽度为1000,每个标签宽度为100,我希望labelone覆盖900,然后放置labeltwo覆盖100。每次更改初始窗口宽度时都是相对的。
-
@Abrar 基本框架。
-
@Abrar 在第 37 行使用:tk.Frame.__init__(self, parent) 用作 MenuFrame 的父框架,因此在初始化 MenuFrame 时它继承了基本框架的质量跨度>
-
@Abrar 计划在我解决这个问题后使用它,所以我认为这不是重点