私はソフトウェア開発の学生で、私は学習目的でPythonでアプリケーション(私の最初のアプリケーション!)を開発しています。 これはかなりうまく動作し、機能しているほとんどすべての機能が動作しています。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自体がクラッシュします。
私はon_return(done)
下
usure.destroy()
print('usure destroyed')
、一番下のすべての方法、それはウィンドウを閉じ、メインメニューに戻りませんが、主なメニューは、グラフィカルな歪みで描画されるとすぐに、まだクラッシュ移動した場合その後。
私は実際に何が起こっているのか分かりません。
誰でも問題を追跡してください。
これはIDLEから実行しているようですが、そうですか?もしそうなら、これをコマンドラインから実行できますか? – Novel
問題が発生しているコードの最小量にアプリケーションを減らし、**ここに質問に投稿してください。 – martineau
あなたのプログラムで 'Tk()'や 'maniloop()'を2回以上呼び出す場合、それが問題の一部です。余分なウィンドウが必要な場合は、 'Toplevel'のインスタンスを作成してください。 –