【发布时间】:2020-11-09 12:54:39
【问题描述】:
我正在尝试制作一个 GUI,它有几个看起来应该相似的窗口。所有窗口都应该在左侧有菜单。在右侧,它将包含制作窗口的内容,因此在几个窗口之间会有所不同。
一张图片来说明我要解释的内容:
所以左边的菜单对于每个窗口应该保持不变,但右边的内容应该不同。我正在使用的代码是:
import tkinter as tk
class Home:
def __init__(self, master):
maincolor = 'darkgrey'
menucolor = 'grey'
# Menu creation
menu = tk.Frame(master, bg=menucolor)
# Main creation
main = tk.Frame(master, bg=maincolor)
# Menu positioning
menu.grid(row=0, column=0, sticky='nsew')
# Main positioning
main.grid(row=0, column=1, sticky='nsew')
# Menu items
self.home = tk.Button(menu, text='Home')
self.overview = tk.Button(menu, text='Overview')
self.apartments = tk.Button(menu, text='Apartments')
self.students = tk.Button(menu, text='Students')
self.stats = tk.Button(menu, text='Statistics')
# Menu items location
self.home.grid(row=0, column=0, pady=(25, 50), padx=15)
self.overview.grid(row=1, column=0, pady=(0, 50), padx=15)
self.apartments.grid(row=2, column=0, pady=(0, 50), padx=15)
self.students.grid(row=3, column=0, pady=(0, 50), padx=15)
self.stats.grid(row=4, column=0, pady=(0, 50), padx=15)
# Menu items configuration
buttons = [self.home, self.overview, self.apartments, self.students, self.stats]
for self.button in buttons:
self.button.configure(width=20, height=5, highlightbackground=menucolor)
# Main items
self.maintext = tk.Label(main, text='Welcome to the Apartment Manager', bg=maincolor, pady=250)
self.maintext.pack()
class Overviews(Home):
pass
class Apartments(Home):
pass
class Students(Home):
pass
class Stats(Home):
pass
root = tk.Tk()
root.title('Apartment Manager')
root.geometry('750x750')
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=7)
root.grid_rowconfigure(0, weight=1)
root.wm_withdraw()
root.update()
runit = Home(root)
root.after(1, root.deiconify)
root.mainloop()
我的问题是,我如何从Home 类继承,以便除右侧内容外的所有内容都相同?
【问题讨论】:
-
你应该把
left窗口放到另一个类中,而不是包含在Home类中。 -
好的,谢谢。为什么这比将其放入
home的__init__中更好?我应该在__init__中添加任何内容吗?如果可以,该怎么做? -
我认为只要单击左侧窗口中的一个按钮,您就想切换右侧窗口,对吧?那么,当单击
Home的Overview按钮时,如何获取例如Overviews页面的实例? -
我想通过按钮命令(在主屏幕上)调用Overviews类,然后在Overviews类中继承左右部分并覆盖右侧部分。不知道这是否合适或可能。很想听听你的想法!
标签: python class oop inheritance tkinter