我正在嘗試創建一個基本的發票系統。但是,正如您從我的標題中可以看出的那樣,我遇到了一個問題,有什么方法可以實作這一點。我一直在使用計數器來確定視窗是否應該打開,但我認為這是不對的。
from tkinter import *
window = Tk()
count = 0
def openNewWindow():
global count
count = count 1
if count == 1:
newWindow = Toplevel(window)
newWindow.title("New Window")
newWindow.geometry("800x800")
newWindow.title('test ?') # Frame title
newWindow.iconbitmap('icon4.ico') # Frame logo
if 'normal' == newWindow.state():
count = 2
else:
count = 0
width = window.winfo_screenwidth()
height = window.winfo_screenheight()
window.geometry("%dx%d" % (width, height))
bg = PhotoImage(file="bsor.gif")
label_image = Label(window, image=bg)
label_image.place(x=0, y=0)
title_label = Label(window, text="Job Management System", bg="black", fg="white")
title_label.config(font=("Courier", 70))
title_label.place(x=65, y=3)
customer_database_button = Button(window, text="Customer Database", width="23", height="2",
font=('Courier', 13, 'bold'), command=openNewWindow)
customer_database_button.grid(row=3, column=0, pady=185, padx=(110, 0))
employee_database_button = Button(window, text="Employee Database", width="23", height="2",
font=('Courier', 13, 'bold'))
employee_database_button.grid(row=3, column=1, pady=10, padx=(50, 0))
job_category_button = Button(window, text="Job Category (Pricing)", width="23", height="2",
font=('Courier', 13, 'bold'))
job_category_button.grid(row=3, column=2, pady=10, padx=(50, 0))
quote_sale_button = Button(window, text="Quotes / Sales", width="23", height="2", font=
('Courier', 13, 'bold'))
quote_sale_button.grid(row=3, column=3, pady=10, padx=(50, 0))
cash_management_button = Button(window, text="Cash Management", width="23", height="2", font=
('Courier', 13, 'bold'))
cash_management_button.grid(row=3, column=4, pady=10, padx=(50, 0))
analysis_mode_button = Button(window, text="Analysis Mode", width="23", height="2", font=
('Courier', 13, 'bold'))
analysis_mode_button.grid(row=3, column=5, pady=10, padx=(50, 0))
window.title('test') # Frame title
window.iconbitmap('icon4.ico') # Frame logo
window.mainloop()
uj5u.com熱心網友回復:
這是有關如何執行此操作的最小示例(僅使用一個額外的允許視窗效果最佳):
from tkinter import Tk, Toplevel, Button
def open_window(button):
button.config(state='disabled')
top = Toplevel(root)
top.transient(root)
top.focus_set()
top.bind('<Destroy>', lambda _: btn.config(state='normal'))
root = Tk()
root.geometry('300x200')
btn = Button(root, text='Open new window!', command=lambda: open_window(btn))
btn.pack(expand=True)
root.mainloop()
只需讓該功能禁用按鈕并將<Destroy>事件系結到Toplevel即可將按鈕的狀態設定回正常。(此外,您可能希望使用.transientonToplevel使其顯示在其主控上方,以便人們不會忘記他們尚未關閉視窗并想知道為什么他們無法按下按鈕(它也不會在其中顯示其他圖示)任務欄))
另外:
我強烈建議*在匯入某些內容時不要使用通配符 ( ),您應該匯入您需要的內容,例如from module import Class1, func_1, var_2等等或匯入整個模塊:import module然后您也可以使用別名:import module as md或類似的東西,重點是不要除非您確實知道自己在做什么,否則不要匯入所有內容;名稱沖突是問題。
我強烈建議遵循PEP 8 - Python 代碼風格指南。函式名和變數名應該在snake_case,類名應該在CapitalCase. 沒有足夠的空間周圍=,如果它被用作關鍵字引數的一部分,( func(arg='value')),但周圍有空間,=如果是用于分配的值(variable = 'some value')。在運算子周圍留出空間( -/等value = x y:(此處除外value = x y))。在函式和類宣告周圍有兩個空行。
uj5u.com熱心網友回復:
感謝 Matiiss 的回答:
from tkinter import Tk, Toplevel, Button
def open_window(button):
button.config(state='disabled')
top = Toplevel(root)
top.transient(root)
top.focus_set()
top.bind('<Destroy>', lambda _: btn.config(state='normal'))
root = Tk()
root.geometry('300x200')
btn = Button(root, text='Open new window!', command=lambda: open_window(btn))
btn.pack(expand=True)
root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/315076.html
