das ist einfaches Beispiel für meinen Code:Python tkinter, starten Sie das Programm
from tkinter import *
import random
class A:
def __init__(self, master):
n = random.randrange(1, 10, 1)
self.frame_a = Frame(master)
self.frame_a.pack()
self.label_a = Label(self.frame_a, text=n)
self.label_a.pack()
def clean(self):
self.frame_a.destroy()
A(root)
B(root)
class B:
def __init__(self, master):
self.frame_b = Frame(master)
self.frame_b.pack()
self.button_b = Button(self.frame_b, text='again', command=self.do_again)
self.button_b.pack()
def do_again(self):
self.frame_b.destroy()
hello.clean()
root = Tk()
hello = A(root)
world = B(root)
root.mainloop()
ich löschen möchten alle Rahmen und Beschriftung und das Programm neu starten. Aber es funktioniert nicht richtig. Wenn ich zum ersten Mal die Taste again
verwende, funktioniert es. Wenn ich jedoch erneut auf die Schaltfläche klicke, wird der Rahmen nicht zerstört.
EDIT: Dies ist ein Beispiel meines Code:
class GamePick:
def __init__(self):
#there are also some labels and frames but they relate to my problem
def do_black_jack(self):
global bj
global bj_play
''' You pick Black Jack, open new window and close actual window'''
bj = Toplevel(self.master)
bj_play = BjGui(bj)
bj['bg'] = 'springgreen4'
bj.wm_geometry("1500x900")
Choices.close(my)
class BlackJack:
#There are some function for pick new card for player and dealer
def check_limit(self):#
if sum(player_cards_val) > 21:
if 11 in player_cards_val:
player_cards_val.remove(11)
player_cards_val.append(1)
self.check_limit()
else:
bj_play.show_result(res='Dealer win')
elif sum(bot_cards_val) > 21:
if 11 in bot_cards_val:
bot_cards_val.remove(11)
bot_cards_val.append(1)
self.check_sixteen()
else:
bj_play.show_result(res='Player win')
else:
if sum(player_cards_val) > sum(bot_cards_val):
bj_play.show_result(res='Player win')
else:
bj_play.show_result(res='Dealer win')
class BjGui:
def __init__(self, master):
self.master = master
self.bot_frame = Frame(self.master, height=False, width=False, bg='springgreen4')
bj.wm_geometry("1500x900")
self.bot_frame.pack(side='top', pady=20)
self.player_frame = Frame(self.master, height=False, width=False, bg='springgreen4')
bj.wm_geometry("1500x900")
self.player_frame.pack(side='bottom', pady=20)
self.buttons_frame = Frame(self.master, bg='springgreen4')
self.buttons_frame.pack(side=BOTTOM)
# There are function for this class, they show players cards and bots cards from class Black Jack
def show_result(self, res):#This function, create new label and button.
# New label show result of the game, after I click button, it should will restart
self.info_label = Label(self.master, text=res, font=('aharoni', 60), bg='springgreen4', pady=35)
self.info_label.pack()
self.again_frame = Frame(self.master)
self.again_frame.pack()
self.again_bt = Button(self.again_frame, text='play again', font=('times', 12), command=self.do_again, bg='blue')
self.again_bt.pack()
def do_again(self):# This should delete all frames and clear list with cards and restart game, but it doesn't work
self.info_label.destroy()
self.again_frame.destroy()
self.player_frame.destroy()
self.bot_frame.destroy()
self.buttons_frame.destroy()
bot_cards_key.clear()
bot_cards_val.clear()
player_cards_key.clear()
player_cards_val.clear()
no_repeat.clear()
BlackJack()
BjGui(bj)
Ich mag Black Jack-Spiel schaffen. class BlackJack
wählt neue Karten für Spieler und Dealer aus, vergleicht den Wert dieser Karten und bestimmt, wer der Gewinner ist. class BjGui
zeigt Spieler und Händlerkarten, dort einige Knöpfe Rahmen und Etiketten. Wenn das Spiel endet, benutze ich die Funktion check_limit
, es bestimmt, wer der Gewinner ist und die Funktion show_result
neues Etikett mit Ergebnis und neuer Schaltfläche erstellen. Diese Schaltfläche sollte das Spiel neu starten können.
@Marty Sehen Sie die letzten zwei Zeilen Ihrer Probe? Sie erstellen neue Objekte innerhalb des vorhandenen Objekts. Dies ersetzt nicht die vorhandenen Objekte. Die vorhandenen Objekte werden nicht zurückgesetzt. Erstellen Sie keine neuen Objekte. Ändern Sie einfach den Status der vorhandenen Objekte so, wie Sie sie haben möchten. – beauxq