我是一名軟件開發學生,我正在開發一個應用程序(我的第一個應用程序! 它工作得很好,我幾乎獲得了所有想要工作的功能。破壞Tkinter窗口時發生Python崩潰
程序的簡短說明:這是記錄一個運動俱樂部的成員的行政程序。所以它有一個像添加成員,列出成員等
因爲這是完整的,它也需要一個函數來刪除一個成員的基本功能。這一直運行良好,但我很少使用該功能。現在
我修改了一個ttk.Treeview()
對象之後,所以它現在排序按姓氏,我增加了一個新成員,看它是否排序像它應該。它做了!
現在我想刪除成員,但由於某些原因,它不再起作用。
它崩潰了Python。它不會使應用程序崩潰,沒有錯誤,只是簡單的「Pythonw.exe已停止工作」。
這裏的一切屬於該函數的代碼:
def dellid(zeid, addwindow):
winsound.PlaySound("SystemHand", winsound.SND_ASYNC)
usure = tkinter.Tk()
print('usure window created')
usure.title('Lid verwijderen')
usure.geometry('{}x{}'.format('300', '150'))
usure.iconbitmap(default='programdata\\icon.ico')
usure.attributes("-topmost", True)
addwindow.grab_set()
#logo2 = PhotoImage(file="warning.png")
#logolabel = tkinter.Label(usure, image = logo2)
#logolabel.grid(row01, columnspan = 2)
usure.columnconfigure(0, weight = 1)
usure.columnconfigure(1, weight = 2)
label01 = tkinter.Label(usure, text = '''
Weet U zeker dat U dit lid wilt verwijderen?
Deze actie kan niet ongedaan worden gemaakt!''').grid(row = 1, columnspan = 2)
emptyrow = tkinter.Label(usure, text = ' ').grid(row = 2, columnspan = 2)
jaknop = ttk.Button(usure, text = 'Ja', command = lambda: delforsure(zeid, usure, addwindow)).grid(row = 3, column = 0, sticky = 'E')
neeknop = ttk.Button(usure, text = 'Nee', command = lambda: nodell(addwindow, usure)).grid(row = 3, column = 1, sticky = 'S')
def nodell(addwindow, usure):
addwindow.grab_release()
usure.destroy()
def delforsure(zeid, usure, addwindow):
#addwindow.grab_release()
addwindow.destroy()
print('addwindow destroyed')
usure.destroy()
print('usure destroyed')
conn = sqlite3.connect('test.db')
c = conn.cursor()
opendb = []
opendb.append(zeid)
print(zeid)
print(opendb)
c.execute("DELETE FROM leden WHERE ids = ?",opendb)
print('c.execute')
conn.commit()
print('c.commit')
#usure.destroy()
done = tkinter.Tk()
done.title('Lid verwijdert')
done.geometry('{}x{}'.format('300', '150'))
done.iconbitmap(default='programdata\\icon.ico')
label01 = tkinter.Label(done, text = '''
Lid verwijdert
''')
label01.pack()
done.update()
time.sleep(2)
on_return(done)
的on_return
功能關閉所述窗口並重新打開主菜單。
現在delforsure(zeid, usure, addwindow)
它鎖起來就行了usure.destroy()
它不打印行「USURE摧毀」了,我放在那裏,看看它鎖定了。
它不給任何錯誤,Python本身只是崩潰。
如果我提出
usure.destroy()
print('usure destroyed')
on_return(done)
下,在底部一路,它關閉該窗口,並返回到主菜單,但主菜單與圖形失真繪製,並很快仍然崩潰之後。
我真的不明白是怎麼回事。
任何人可以幫助我跟蹤這個問題嗎?
這聽起來像是你從IDLE運行這個,是嗎?如果是這樣,你可以嘗試從命令行運行它嗎? – Novel
將您的應用程序減少到展示該問題的最少量代碼,然後**在這裏將問題發佈到一個問題中。 – martineau
如果您在程序中多次調用'Tk()'和/或'maniloop()',那就是問題的一部分如果您需要額外的窗口,則創建'Toplevel'實例。 –