问题描述
因此,我正在构建一个纸牌游戏程序,以允许2个玩家彼此对战(MTG),但是我对此问题完全感到困惑。
所以我有2个画布,每个玩家要生成的1个“战场”代码是相同的(只是更改了名称),并且将“卡”添加到每个战场的代码几乎是相同的(删除了一些菜单)对手的牌)
当我在玩家卡上使用frame.destory()时,它可以正常工作并删除框架,但是当我在对手卡框架上使用它时,程序将停止运行,并且没有响应。
我正在使用python 2.7,该程序在card_frame.destroy()上的robot_card_removed_field例程中停顿了
有什么想法我做错了吗?
这是我的代码;
对手框架创建代码;
def create_opponent_frame(self):
self.opponent_frame = tk.Frame(self.field,bg='grey11',highlightthickness=0)
self.opponent_battlefield = tk.Frame(self.opponent_frame,highlightthickness=0)
self.opponent_battlefield_canvas = tk.Canvas(self.opponent_battlefield)
self.opponent_battlefield_canvas.pack(side='top',padx=(2,2),pady=(2,2))
self.opponent_battlefield.pack(side='left',fill='both',expand='True',padx=(5,5),pady=(5,5))
self.opponent_frame.pack(side='top',fill="both",expand="True")
播放器框架创建;
def create_player_frame(self):
self.player_frame = tk.Frame(self.field,highlightthickness=0)
self.player_battlefield = tk.Frame(self.player_frame,highlightthickness=0)
self.player_battlefield_canvas = tk.Canvas(self.player_battlefield)
self.player_battlefield_canvas.pack(side='top',2))
self.player_battlefield.pack(side='left',5))
self.player_frame.pack(side='top',expand="True")
def create_player_battlefield_card(self,card,status,facing):
details['card'] = card
details["card frame"] = tk.Frame(self.player_battlefield_canvas,bg='midnight blue',highlightthickness=0)
details["card canvas"] = tk.Canvas(details["card frame"],width=75,height=105,highlightthickness=0)
details["original"] = image
details["img"] = details["original"].resize((75,105))
details["img"] = ImageTk.PhotoImage(details["img"])
details['list index'] = a
details['count'] = self.player_field
details["object"] = details["card canvas"].create_image(0,anchor='nw',image=details["img"])
self.player_battlefield_image_objects.append(details)
details["card canvas"].pack(side='top')
self.player_battlefield_canvas.create_window((55,75),window=details["card frame"],tags=details['count'])
创建对手卡(同样,图像是来自db的图像文件);
def create_opponent_battlefield_card(self,facing):
details['card'] = card
details["card frame"] = tk.Frame(self.opponent_battlefield_canvas,highlightthickness=0)
details["original"] = image
details['img'] = image.rotate(180)
details["img"] = details["img"].resize((75,105))
details["img"] = ImageTk.PhotoImage(details["img"])
details['list index'] = a
details['count'] = self.opponent_field
details["object"] = details["card canvas"].create_image(0,image=details["img"])
self.opponent_battlefield_image_objects.append(details)
details["card canvas"].pack(side='top')
y = self.opponent_battlefield_canvas.winfo_height() - details["card frame"].winfo_height()
y -= 75
self.opponent_battlefield_canvas.create_window((55,y),tags=details['count'])
def field_to_hand(self,list_index):
card = self.player_battlefield_image_objects[list_index]['card']
card_frame = self.player_battlefield_image_objects[list_index]['card frame']
status = self.player_battlefield_image_objects[list_index]['status']
if status == 'original':
self.create_player_hand_card(card)
card_frame.destroy()
self.player_battlefield_image_objects.pop(list_index)
for detail in self.player_battlefield_image_objects:
if detail['list index'] > list_index:
self.player_battlefield_image_objects[detail['list index'] - 1]['list index'] -= 1
def opponent_card_removed_field(self,list_index):
card = self.opponent_battlefield_image_objects[list_index]['card']
card_frame = self.opponent_battlefield_image_objects[list_index]['card frame']
status = self.opponent_battlefield_image_objects[list_index]['status']
card_frame.destroy()
print self.opponent_battlefield_image_objects
self.opponent_battlefield_image_objects.pop(list_index)
for detail in self.opponent_battlefield_image_objects:
if detail['list index'] > list_index:
self.opponent_battlefield_image_objects[detail['list index'] - 1]['list index'] -= 1
经过编辑以减少代码
解决方法
嗯,在2.7中似乎有些怪异。我刚刚将代码移植到python 3.7上,一切都很好。它运行时没有上面我看到的任何问题