【发布时间】:2020-12-03 11:47:25
【问题描述】:
我正在制作一个板球比赛,其中可以选择两支球队参加比赛。用户可以通过单击下一个和上一个按钮从所有可用团队中选择两个团队,每次单击都会更改图像(实际上是团队的标志)和团队的名称。我为选择过程创建了一个通用函数。在该函数/方法中,标签和按钮已经存在并打包。我只需将分配的帧作为参数传递给函数,分别为团队 1 和团队 2 调用它。
现在的问题是,在为第一方(Team1)调用该函数后,当我为第二方(Team 2)调用该函数时,图像和名称仅在第二方更改。 通过查看程序可以更好地理解这个问题,因为也许我无法解释我的问题。 我希望两对下一个和上一个按钮独立工作以选择团队。我试图为这个东西创建一个单独的类,但这完全是一个无关紧要的解决方案,当然是行不通的。
从我的完整游戏代码中提取的一段代码附在下面。
from tkinter import *
class CricketMatch(Tk):
def __init__(self):
super(CricketMatch, self).__init__()
self.title("Cricket 2020")
self.geometry('980x660+200-60')
self.state('zoomed')
selection_Frame = Frame(self)
selection_Frame.pack()
### TEAM 1 CONTAINER ###
Team1_Container = Frame(selection_Frame)
Team1_Container.pack(side = LEFT)
ButtonFrame = Frame(Team1_Container)
self.select_Teams(Team1_Container, ButtonFrame) #Function called for team1
ButtonFrame.pack(pady = (20,0))
vsLabel = Label(selection_Frame, text = 'VS')
vsLabel.pack(side = LEFT, padx = 50)
# ### TEAM 2 CONTAINER ###
Team2_Container = Frame(selection_Frame)
Team2_Container.pack()
ButtonFrame2 = Frame(Team2_Container)
self.select_Teams(Team2_Container, ButtonFrame2) #Function called for team2
ButtonFrame2.pack(pady = (20,0))
def select_Teams(self, ImageFrame, ButtonFrame):
self.teams = ['Afghanistan', 'Australia', 'Bangladesh', 'England', 'India',
'Ireland', 'Kenya', 'Netherlands', 'Newzealand', 'Pakistan',
'Scotland', 'SouthAfrica', 'Srilanka', 'UAE', 'WestIndies',
'Zimbabwe']
self.cur_image = 0
self.image = Label(ImageFrame, text = f"{self.teams[self.cur_image]}.png" , font=('', 12, 'bold'), bg='light blue')
self.image.pack(ipady = 30)
self.left = Button(ButtonFrame, text="<", fg='red', font=('', 11, 'bold'), command=self.lefttoggle)
self.left.pack(side=LEFT)
self.image_name=Label(ButtonFrame, text=self.teams[self.cur_image], font=('', 10,'bold'))
self.image_name.pack(side=LEFT)
self.right = Button(ButtonFrame, text=">", fg='red', font=('', 11, 'bold'), command=self.righttoggle)
self.right.pack(side=LEFT)
def lefttoggle(self):
self.cur_image = (self.cur_image - 1) % len(self.teams)
self.update_image()
def righttoggle(self):
self.cur_image = (self.cur_image + 1) % len(self.teams)
self.update_image()
def update_image(self):
self.image.config(text=f"{self.teams[self.cur_image]}.png")
self.image_name.config(text=self.teams[self.cur_image])
Match = CricketMatch()
Match.mainloop()
【问题讨论】:
-
你为什么要对 self.cur_image 做模运算
-
@reece 按下按钮时以连续方式显示下一个和上一个图像。还有其他方法吗?实际上,我已经从其他地方为这件事编辑了另一段代码。
-
@reece 如果有更好的方法来完成所有这些工作,请分享。我会非常感谢你。
-
不,我只是想知道,因为它不是我以前见过的任何东西来环绕数组
标签: python python-3.x tkinter methods