我正在嘗試創建一個帶有通過選單打開的頁面的 Tkinter 管理系統。打開頁面時,我想破壞前一頁并打開一個新頁面(所有這些都通過選單按鈕)但我沒有成功。請問,有人可以幫我編輯代碼嗎?我會很感激的。我一直在與代碼作斗爭,直到我感到困惑。
from tkinter import *
root= Tk()
root.geometry("1200x900")
root.title("Hospital Management System")
root.iconbitmap(r'C:\Users\KEN\electron-api-demos\development\grad.ico')
#=========================functions for switching the windows========
def HR_change():
HR=Tk()
HR.geometry("1200x900")
HR.title("HR")
HR.grid()
Schain.destroy()
root.destroy()
def Schain_change():
Schain=Tk()
Schain.geometry("1200x900")
Schain.title("SUPPLY CHAIN")
Schain.grid()
HR.destroy()
root.destroy()
# menus for the root
menubar= Menu(root)
File=Menu(menubar, tearoff=0)
File.add_command(label='Open File')
File.add_command(label='Save')
File.add_command(label='Exit')
menubar.add_cascade(label="File", menu=File)
Departments=Menu(menubar, tearoff=0)
Departments.add_command(label='Human Resource Department',command=HR_change)
Departments.add_command(label='Supply chain Department',command=Schain_change)
menubar.add_cascade(label="Departments", menu=Departments)
Help=Menu(menubar, tearoff=0)
Help.add_command(label='About ihms')
Help.add_command(label='Manual')
menubar.add_cascade(label="Help", menu=Help)
Settings=Menu(menubar, tearoff=0)
Settings.add_command(label='Log Out')
menubar.add_cascade(label="Settings", menu=Settings)
#configure menu for root
root.config(menu=menubar)
# menus for the HR DPT
menubar= Menu(HR)
File=Menu(menubar, tearoff=0)
File.add_command(label='Open File')
File.add_command(label='Save')
File.add_command(label='Exit')
menubar.add_cascade(label="File", menu=File)
Departments=Menu(menubar, tearoff=0)
Departments.add_command(label='Human Resource Department',command=HR_change)
Departments.add_command(label='Supply chain Department',command=Schain_change)
menubar.add_cascade(label="Departments", menu=Departments)
Help=Menu(menubar, tearoff=0)
Help.add_command(label='About ihms')
Help.add_command(label='Manual')
menubar.add_cascade(label="Help", menu=Help)
Settings=Menu(menubar, tearoff=0)
Settings.add_command(label='Log Out')
menubar.add_cascade(label="Settings", menu=Settings)
#configure menu for root
HR.config(menu=menubar)
# content in HR window pages
name=Label(HR, text="Name")
name.grid(row=1, column=0, padx=10, pady=2, sticky=W)
nameentry=Entry(HR, width=40)
nameentry.grid(row=1, column=1, padx=10, pady=20)
Age=Label(HR, text="Age")
Age.grid(row=2, column=0, padx=10, pady=20, sticky=W)
Ageentry=Entry(HR, width=40)
Ageentry.grid(row=2, column=1, padx=10, pady=20)
NatID=Label(HR, text="National ID")
NatID.grid(row=3, column=0, padx=10, pady=2, sticky=W)
NatIDentry=Entry(HR, width=40)
NatIDentry.grid(row=3, column=1, padx=10, pady=20)
Jobpos=Label(HR, text="Job Position")
Jobpos.grid(row=4, column=0, padx=10, pady=20, sticky=W)
Jobposentry=Entry(HR, width=40)
Jobposentry.grid(row=4, column=1, padx=10, pady=20)
name=Label(HR, text="Name")
name.grid(row=1, column=2, padx=10, pady=2, sticky=W)
nameentry=Entry(HR, width=40)
nameentry.grid(row=1, column=3, padx=10, pady=20)
Age=Label(HR, text="Age")
Age.grid(row=2, column=2, padx=10, pady=20, sticky=W)
Ageentry=Entry(HR, width=40)
Ageentry.grid(row=2, column=3, padx=10, pady=20)
NatID=Label(HR, text="National ID")
NatID.grid(row=3, column=2, padx=10, pady=2, sticky=W)
NatIDentry=Entry(frame, width=40)
NatIDentry.grid(row=3, column=3, padx=10, pady=20)
Jobpos=Label(HR, text="Job Position")
Jobpos.grid(row=4, column=2, padx=10, pady=20, sticky=W)
Jobposentry=Entry(HR, width=40)
Jobposentry.grid(row=4, column=3, padx=10, pady=20)
name=Label(HR, text="Name")
name.grid(row=1, column=4, padx=10, pady=2, sticky=W)
nameentry=Entry(HR, width=40)
nameentry.grid(row=1, column=5, padx=10, pady=20)
Age=Label(HR, text="Age")
Age.grid(row=2, column=4, padx=10, pady=20, sticky=W)
Ageentry=Entry(HR, width=40)
Ageentry.grid(row=2, column=5, padx=10, pady=20)
NatID=Label(HR, text="National ID")
NatID.grid(row=3, column=4, padx=10, pady=2, sticky=W)
NatIDentry=Entry(HR, width=40)
NatIDentry.grid(row=3, column=5, padx=10, pady=20)
Jobpos=Label(HR, text="Job Position")
Jobpos.grid(row=4, column=4, padx=10, pady=20, sticky=W)
Jobposentry=Entry(HR, width=40)
Jobposentry.grid(row=4, column=5, padx=10, pady=20)
# content in schain window page
email=Label(Schain, text="email")
email.grid(row=1, column=0, pady=10)
# more frames
# destroy the program
root.mainloop()
uj5u.com熱心網友回復:
解決方案
由于您在這里多次破壞和創建視窗,因此面向物件的方法將有很大幫助。將所有選單和內容包裝到一個HRWindow類和一個SchainWindow類中。
HRWindow 類:
class HRWindow(tk.Toplevel):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.add_menus()
self.add_content()
def add_menus(self):
# menus for the HR DPT
menubar = tk.Menu(self)
File = tk.Menu(menubar, tearoff=0)
File.add_command(label='Open File')
File.add_command(label='Save')
File.add_command(label='Exit')
menubar.add_cascade(label="File", menu=File)
Departments = tk.Menu(menubar, tearoff=0)
Departments.add_command(label='Human Resource Department',command=HR_change)
Departments.add_command(label='Supply chain Department',command=Schain_change)
menubar.add_cascade(label="Departments", menu=Departments)
Help = tk.Menu(menubar, tearoff=0)
Help.add_command(label='About ihms')
Help.add_command(label='Manual')
menubar.add_cascade(label="Help", menu=Help)
Settings = tk.Menu(menubar, tearoff=0)
Settings.add_command(label='Log Out')
menubar.add_cascade(label="Settings", menu=Settings)
#configure menu for root
self.config(menu=menubar)
def add_content(self):
# content in self window pages
name = tk.Label(self, text="Name")
name.grid(row=1, column=0, padx=10, pady=2, sticky=W)
nameentry = tk.Entry(self, width=40)
nameentry.grid(row=1, column=1, padx=10, pady=20)
Age = tk.Label(self, text="Age")
Age.grid(row=2, column=0, padx=10, pady=20, sticky=W)
Ageentry = tk.Entry(self, width=40)
Ageentry.grid(row=2, column=1, padx=10, pady=20)
NatID = tk.Label(self, text="National ID")
NatID.grid(row=3, column=0, padx=10, pady=2, sticky=W)
NatIDentry = tk.Entry(self, width=40)
NatIDentry.grid(row=3, column=1, padx=10, pady=20)
Jobpos = tk.Label(self, text="Job Position")
Jobpos.grid(row=4, column=0, padx=10, pady=20, sticky=W)
Jobposentry = tk.Entry(self, width=40)
Jobposentry.grid(row=4, column=1, padx=10, pady=20)
name = tk.Label(self, text="Name")
name.grid(row=1, column=2, padx=10, pady=2, sticky=W)
nameentry = tk.Entry(self, width=40)
nameentry.grid(row=1, column=3, padx=10, pady=20)
Age = tk.Label(self, text="Age")
Age.grid(row=2, column=2, padx=10, pady=20, sticky=W)
Ageentry = tk.Entry(self, width=40)
Ageentry.grid(row=2, column=3, padx=10, pady=20)
NatID = tk.Label(self, text="National ID")
NatID.grid(row=3, column=2, padx=10, pady=2, sticky=W)
NatIDentry = tk.Entry(self, width=40)
NatIDentry.grid(row=3, column=3, padx=10, pady=20)
Jobpos = tk.Label(self, text="Job Position")
Jobpos.grid(row=4, column=2, padx=10, pady=20, sticky=W)
Jobposentry = tk.Entry(self, width=40)
Jobposentry.grid(row=4, column=3, padx=10, pady=20)
name = tk.Label(self, text="Name")
name.grid(row=1, column=4, padx=10, pady=2, sticky=W)
nameentry = tk.Entry(self, width=40)
nameentry.grid(row=1, column=5, padx=10, pady=20)
Age = tk.Label(self, text="Age")
Age.grid(row=2, column=4, padx=10, pady=20, sticky=W)
Ageentry = tk.Entry(self, width=40)
Ageentry.grid(row=2, column=5, padx=10, pady=20)
NatID = tk.Label(self, text="National ID")
NatID.grid(row=3, column=4, padx=10, pady=2, sticky=W)
NatIDentry = tk.Entry(self, width=40)
NatIDentry.grid(row=3, column=5, padx=10, pady=20)
Jobpos = tk.Label(self, text="Job Position")
Jobpos.grid(row=4, column=4, padx=10, pady=20, sticky=W)
Jobposentry = tk.Entry(self, width=40)
Jobposentry.grid(row=4, column=5, padx=10, pady=20)
SchainWindow 類:
class SchainWindow(tk.Toplevel):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.add_content()
def add_content(self):
email = tk.Label(self, text="email")
email.grid(row=1, column=0, pady=10)
為了確保所有視窗都處于活動狀態,您需要設定一些標志,然后在您的函式中添加對這些標志的檢查
schain_active = False
hr_active = False
def HR_change():
global HR, schain_active, root_active
HR = HRWindow()
HR.geometry("1200x900")
HR.title("HR")
if schain_active:
Schain.destroy()
schain_active = False
def Schain_change():
global Schain, hr_active, root_active
Schain = SchainWindow()
Schain.geometry("1200x900")
Schain.title("SUPPLY CHAIN")
if hr_active:
HR.destroy()
hr_active = False
編輯
這可能不是一個很好的優化解決方案,我認為您可能想嘗試顯示/隱藏框架。
銷毀root意味著銷毀您的應用程式,一旦您銷毀 root,您也將無法訪問其他頂級視窗。因此,為了做到這一點,您可以將頂層視窗轉換為tk.Tk. 還要創建一個標志來檢查根是否可見。以下是您的代碼在進行所有更改后的外觀:
# try not to import globally
import tkinter as tk
from tkinter.constants import *
root = tk.Tk()
root.geometry("1200x900")
root.title("Hospital Management System")
schain_active = False
hr_active = False
root_active = True
# menus for the HR DPT
class HRWindow(tk.Tk):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.add_menus()
self.add_content()
def add_menus(self):
# menus for the HR DPT
menubar = tk.Menu(self)
File = tk.Menu(menubar, tearoff=0)
File.add_command(label='Open File')
File.add_command(label='Save')
File.add_command(label='Exit')
menubar.add_cascade(label="File", menu=File)
Departments = tk.Menu(menubar, tearoff=0)
Departments.add_command(label='Human Resource Department',command=HR_change)
Departments.add_command(label='Supply chain Department',command=Schain_change)
menubar.add_cascade(label="Departments", menu=Departments)
Help = tk.Menu(menubar, tearoff=0)
Help.add_command(label='About ihms')
Help.add_command(label='Manual')
menubar.add_cascade(label="Help", menu=Help)
Settings = tk.Menu(menubar, tearoff=0)
Settings.add_command(label='Log Out')
menubar.add_cascade(label="Settings", menu=Settings)
#configure menu for root
self.config(menu=menubar)
def add_content(self):
# content in self window pages
name = tk.Label(self, text="Name")
name.grid(row=1, column=0, padx=10, pady=2, sticky=W)
nameentry = tk.Entry(self, width=40)
nameentry.grid(row=1, column=1, padx=10, pady=20)
Age = tk.Label(self, text="Age")
Age.grid(row=2, column=0, padx=10, pady=20, sticky=W)
Ageentry = tk.Entry(self, width=40)
Ageentry.grid(row=2, column=1, padx=10, pady=20)
NatID = tk.Label(self, text="National ID")
NatID.grid(row=3, column=0, padx=10, pady=2, sticky=W)
NatIDentry = tk.Entry(self, width=40)
NatIDentry.grid(row=3, column=1, padx=10, pady=20)
Jobpos = tk.Label(self, text="Job Position")
Jobpos.grid(row=4, column=0, padx=10, pady=20, sticky=W)
Jobposentry = tk.Entry(self, width=40)
Jobposentry.grid(row=4, column=1, padx=10, pady=20)
name = tk.Label(self, text="Name")
name.grid(row=1, column=2, padx=10, pady=2, sticky=W)
nameentry = tk.Entry(self, width=40)
nameentry.grid(row=1, column=3, padx=10, pady=20)
Age = tk.Label(self, text="Age")
Age.grid(row=2, column=2, padx=10, pady=20, sticky=W)
Ageentry = tk.Entry(self, width=40)
Ageentry.grid(row=2, column=3, padx=10, pady=20)
NatID = tk.Label(self, text="National ID")
NatID.grid(row=3, column=2, padx=10, pady=2, sticky=W)
NatIDentry = tk.Entry(self, width=40)
NatIDentry.grid(row=3, column=3, padx=10, pady=20)
Jobpos = tk.Label(self, text="Job Position")
Jobpos.grid(row=4, column=2, padx=10, pady=20, sticky=W)
Jobposentry = tk.Entry(self, width=40)
Jobposentry.grid(row=4, column=3, padx=10, pady=20)
name = tk.Label(self, text="Name")
name.grid(row=1, column=4, padx=10, pady=2, sticky=W)
nameentry = tk.Entry(self, width=40)
nameentry.grid(row=1, column=5, padx=10, pady=20)
Age = tk.Label(self, text="Age")
Age.grid(row=2, column=4, padx=10, pady=20, sticky=W)
Ageentry = tk.Entry(self, width=40)
Ageentry.grid(row=2, column=5, padx=10, pady=20)
NatID = tk.Label(self, text="National ID")
NatID.grid(row=3, column=4, padx=10, pady=2, sticky=W)
NatIDentry = tk.Entry(self, width=40)
NatIDentry.grid(row=3, column=5, padx=10, pady=20)
Jobpos = tk.Label(self, text="Job Position")
Jobpos.grid(row=4, column=4, padx=10, pady=20, sticky=W)
Jobposentry = tk.Entry(self, width=40)
Jobposentry.grid(row=4, column=5, padx=10, pady=20)
class SchainWindow(tk.Tk):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.add_content()
def add_content(self):
email = tk.Label(self, text="email")
email.grid(row=1, column=0, pady=10)
def HR_change():
global HR, schain_active, hr_active, root_active
HR = HRWindow()
HR.geometry("1200x900")
HR.title("HR")
hr_active = True
if root_active:
root.destroy()
root_active = False
if schain_active:
Schain.destroy()
schain_active = False
def Schain_change():
global Schain, hr_active, schain_active, root_active
Schain = SchainWindow()
Schain.geometry("1200x900")
Schain.title("SUPPLY CHAIN")
schain_active = True
if root_active:
root.destroy()
root_active = False
if hr_active:
HR.destroy()
hr_active = False
# menus for the root
menubar = tk.Menu(root)
File = tk.Menu(menubar, tearoff=0)
File.add_command(label='Open File')
File.add_command(label='Save')
File.add_command(label='Exit')
menubar.add_cascade(label="File", menu=File)
Departments = tk.Menu(menubar, tearoff=0)
Departments.add_command(label='Human Resource Department',command=HR_change)
Departments.add_command(label='Supply chain Department',command=Schain_change)
menubar.add_cascade(label="Departments", menu=Departments)
Help = tk.Menu(menubar, tearoff=0)
Help.add_command(label='About ihms')
Help.add_command(label='Manual')
menubar.add_cascade(label="Help", menu=Help)
Settings = tk.Menu(menubar, tearoff=0)
Settings.add_command(label='Log Out')
menubar.add_cascade(label="Settings", menu=Settings)
#configure menu for root
root.config(menu=menubar)
# content in root window pages
name = tk.Label(root, text="Name")
name.grid(row=1, column=0, padx=10, pady=2, sticky=W)
nameentry = tk.Entry(root, width=40)
nameentry.grid(row=1, column=1, padx=10, pady=20)
Age = tk.Label(root, text="Age")
Age.grid(row=2, column=0, padx=10, pady=20, sticky=W)
Ageentry = tk.Entry(root, width=40)
Ageentry.grid(row=2, column=1, padx=10, pady=20)
NatID = tk.Label(root, text="National ID")
NatID.grid(row=3, column=0, padx=10, pady=2, sticky=W)
NatIDentry = tk.Entry(root, width=40)
NatIDentry.grid(row=3, column=1, padx=10, pady=20)
Jobpos = tk.Label(root, text="Job Position")
Jobpos.grid(row=4, column=0, padx=10, pady=20, sticky=W)
Jobposentry = tk.Entry(root, width=40)
Jobposentry.grid(row=4, column=1, padx=10, pady=20)
# destroy the program
root.mainloop()
完整代碼
# try not to import globally
import tkinter as tk
from tkinter.constants import *
root = tk.Tk()
root.geometry("1200x900")
root.title("Hospital Management System")
schain_active = False
hr_active = False
# menus for the HR DPT
class HRWindow(tk.Toplevel):
def __init__(self, master, *args, **kwargs):
super().__init__(master, *args, **kwargs)
self.master = master
self.add_menus()
self.add_content()
def add_menus(self):
# menus for the HR DPT
menubar = tk.Menu(self)
File = tk.Menu(menubar, tearoff=0)
File.add_command(label='Open File')
File.add_command(label='Save')
File.add_command(label='Exit')
menubar.add_cascade(label="File", menu=File)
Departments = tk.Menu(menubar, tearoff=0)
Departments.add_command(label='Human Resource Department',command=HR_change)
Departments.add_command(label='Supply chain Department',command=Schain_change)
menubar.add_cascade(label="Departments", menu=Departments)
Help = tk.Menu(menubar, tearoff=0)
Help.add_command(label='About ihms')
Help.add_command(label='Manual')
menubar.add_cascade(label="Help", menu=Help)
Settings = tk.Menu(menubar, tearoff=0)
Settings.add_command(label='Log Out')
menubar.add_cascade(label="Settings", menu=Settings)
#configure menu for root
self.config(menu=menubar)
def add_content(self):
# content in self window pages
name = tk.Label(self, text="Name")
name.grid(row=1, column=0, padx=10, pady=2, sticky=W)
nameentry = tk.Entry(self, width=40)
nameentry.grid(row=1, column=1, padx=10, pady=20)
Age = tk.Label(self, text="Age")
Age.grid(row=2, column=0, padx=10, pady=20, sticky=W)
Ageentry = tk.Entry(self, width=40)
Ageentry.grid(row=2, column=1, padx=10, pady=20)
NatID = tk.Label(self, text="National ID")
NatID.grid(row=3, column=0, padx=10, pady=2, sticky=W)
NatIDentry = tk.Entry(self, width=40)
NatIDentry.grid(row=3, column=1, padx=10, pady=20)
Jobpos = tk.Label(self, text="Job Position")
Jobpos.grid(row=4, column=0, padx=10, pady=20, sticky=W)
Jobposentry = tk.Entry(self, width=40)
Jobposentry.grid(row=4, column=1, padx=10, pady=20)
name = tk.Label(self, text="Name")
name.grid(row=1, column=2, padx=10, pady=2, sticky=W)
nameentry = tk.Entry(self, width=40)
nameentry.grid(row=1, column=3, padx=10, pady=20)
Age = tk.Label(self, text="Age")
Age.grid(row=2, column=2, padx=10, pady=20, sticky=W)
Ageentry = tk.Entry(self, width=40)
Ageentry.grid(row=2, column=3, padx=10, pady=20)
NatID = tk.Label(self, text="National ID")
NatID.grid(row=3, column=2, padx=10, pady=2, sticky=W)
NatIDentry = tk.Entry(self, width=40)
NatIDentry.grid(row=3, column=3, padx=10, pady=20)
Jobpos = tk.Label(self, text="Job Position")
Jobpos.grid(row=4, column=2, padx=10, pady=20, sticky=W)
Jobposentry = tk.Entry(self, width=40)
Jobposentry.grid(row=4, column=3, padx=10, pady=20)
name = tk.Label(self, text="Name")
name.grid(row=1, column=4, padx=10, pady=2, sticky=W)
nameentry = tk.Entry(self, width=40)
nameentry.grid(row=1, column=5, padx=10, pady=20)
Age = tk.Label(self, text="Age")
Age.grid(row=2, column=4, padx=10, pady=20, sticky=W)
Ageentry = tk.Entry(self, width=40)
Ageentry.grid(row=2, column=5, padx=10, pady=20)
NatID = tk.Label(self, text="National ID")
NatID.grid(row=3, column=4, padx=10, pady=2, sticky=W)
NatIDentry = tk.Entry(self, width=40)
NatIDentry.grid(row=3, column=5, padx=10, pady=20)
Jobpos = tk.Label(self, text="Job Position")
Jobpos.grid(row=4, column=4, padx=10, pady=20, sticky=W)
Jobposentry = tk.Entry(self, width=40)
Jobposentry.grid(row=4, column=5, padx=10, pady=20)
class SchainWindow(tk.Toplevel):
def __init__(self, master, *args, **kwargs):
super().__init__(master, *args, **kwargs)
self.master = master
self.add_content()
def add_content(self):
email = tk.Label(self, text="email")
email.grid(row=1, column=0, pady=10)
def HR_change():
global HR, schain_active
HR = HRWindow(root)
HR.geometry("1200x900")
HR.title("HR")
if schain_active:
Schain.destroy()
schain_active = False
def Schain_change():
global Schain, hr_active
Schain = SchainWindow(root)
Schain.geometry("1200x900")
Schain.title("SUPPLY CHAIN")
if hr_active:
HR.destroy()
hr_active = False
# menus for the root
menubar = tk.Menu(root)
File = tk.Menu(menubar, tearoff=0)
File.add_command(label='Open File')
File.add_command(label='Save')
File.add_command(label='Exit')
menubar.add_cascade(label="File", menu=File)
Departments = tk.Menu(menubar, tearoff=0)
Departments.add_command(label='Human Resource Department',command=HR_change)
Departments.add_command(label='Supply chain Department',command=Schain_change)
menubar.add_cascade(label="Departments", menu=Departments)
Help = tk.Menu(menubar, tearoff=0)
Help.add_command(label='About ihms')
Help.add_command(label='Manual')
menubar.add_cascade(label="Help", menu=Help)
Settings = tk.Menu(menubar, tearoff=0)
Settings.add_command(label='Log Out')
menubar.add_cascade(label="Settings", menu=Settings)
#configure menu for root
root.config(menu=menubar)
# content in root window pages
name = tk.Label(root, text="Name")
name.grid(row=1, column=0, padx=10, pady=2, sticky=W)
nameentry = tk.Entry(root, width=40)
nameentry.grid(row=1, column=1, padx=10, pady=20)
Age = tk.Label(root, text="Age")
Age.grid(row=2, column=0, padx=10, pady=20, sticky=W)
Ageentry = tk.Entry(root, width=40)
Ageentry.grid(row=2, column=1, padx=10, pady=20)
NatID = tk.Label(root, text="National ID")
NatID.grid(row=3, column=0, padx=10, pady=2, sticky=W)
NatIDentry = tk.Entry(root, width=40)
NatIDentry.grid(row=3, column=1, padx=10, pady=20)
Jobpos = tk.Label(root, text="Job Position")
Jobpos.grid(row=4, column=0, padx=10, pady=20, sticky=W)
Jobposentry = tk.Entry(root, width=40)
Jobposentry.grid(row=4, column=1, padx=10, pady=20)
# destroy the program
root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/469145.html
