使用带有 Tkinter 的网格不能在一个框架中容纳多个标签
Can't fit more than one Label in a Frame using grids with Tkinter
我正在制作一个小部件来显示天气。我正在尝试使用网格工具在一个框架内放置多个标签。我在网格中插入的第一个标签似乎占据了所有位置。无论我做什么,第二个标签都会像这样卡在框架之外:
import tkinter as tk
class App:
def __init__(self, root):
self.root = root
self.root.resizable(False, False)
self.root.geometry('1920x1080')
self.root.configure(bg='#4F6367')
self.weather = Containers(root, 'Weather', 1200, 130)
self.weather.grid(pady=50, padx=50)
self.weather.grid_propagate(0)
self.weather.columnconfigure(0, weight=1)
self.weather.columnconfigure(1, weight=1)
self.sun = tk.Label(self.weather, text='Sunrise time')
self.sun.grid(row=1, column=0)
self.sun2 = tk.Label(self.weather, text='Sunset time')
self.sun2.grid(row=1, column=1)
class Containers(tk.Frame):
def __init__(self, root, name, width, height):
super(Containers, self).__init__(root, width=width, height=height, bg='#F4F2F3')
self.grid_propagate(0)
#Container - Header
self.label_frame = tk.Frame(self, width=width, height=20, bg='#754043')
self.label_frame.grid_propagate(0)
self.label_frame.grid(sticky='N')
#Container - Header - Label
self.label = tk.Label(self.label_frame, text=name, bg='#754043', fg='#F4F2F3')
self.label.grid(sticky='WN')
if __name__ == "__main__":
root = tk.Tk()
user_interface = App(root)
root.mainloop()
这是我的第一个大型 TKinter 项目,因此结构可能并不理想。
谢谢
您在 self.weather
框架中有两列,这意味着 self.label_frame
应该跨越两列:
#Container - Header
self.label_frame = tk.Frame(self, width=width, height=20, bg='#754043')
self.label_frame.grid_propagate(0)
self.label_frame.grid(columnspan=2, sticky='N')
# Span two columns --------^
我正在制作一个小部件来显示天气。我正在尝试使用网格工具在一个框架内放置多个标签。我在网格中插入的第一个标签似乎占据了所有位置。无论我做什么,第二个标签都会像这样卡在框架之外:
import tkinter as tk
class App:
def __init__(self, root):
self.root = root
self.root.resizable(False, False)
self.root.geometry('1920x1080')
self.root.configure(bg='#4F6367')
self.weather = Containers(root, 'Weather', 1200, 130)
self.weather.grid(pady=50, padx=50)
self.weather.grid_propagate(0)
self.weather.columnconfigure(0, weight=1)
self.weather.columnconfigure(1, weight=1)
self.sun = tk.Label(self.weather, text='Sunrise time')
self.sun.grid(row=1, column=0)
self.sun2 = tk.Label(self.weather, text='Sunset time')
self.sun2.grid(row=1, column=1)
class Containers(tk.Frame):
def __init__(self, root, name, width, height):
super(Containers, self).__init__(root, width=width, height=height, bg='#F4F2F3')
self.grid_propagate(0)
#Container - Header
self.label_frame = tk.Frame(self, width=width, height=20, bg='#754043')
self.label_frame.grid_propagate(0)
self.label_frame.grid(sticky='N')
#Container - Header - Label
self.label = tk.Label(self.label_frame, text=name, bg='#754043', fg='#F4F2F3')
self.label.grid(sticky='WN')
if __name__ == "__main__":
root = tk.Tk()
user_interface = App(root)
root.mainloop()
这是我的第一个大型 TKinter 项目,因此结构可能并不理想。 谢谢
您在 self.weather
框架中有两列,这意味着 self.label_frame
应该跨越两列:
#Container - Header
self.label_frame = tk.Frame(self, width=width, height=20, bg='#754043')
self.label_frame.grid_propagate(0)
self.label_frame.grid(columnspan=2, sticky='N')
# Span two columns --------^