我是一名软件开发学生,我正在开发一个应用程序(我的第一个应用程序! 它工作得很好,我几乎获得了所有想要工作的功能。破坏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'实例。 –