Python 使用按钮命令移动tkinter标签
我正在尝试使用python和tkinter重新创建boardgame垄断。我知道如何将标签放置在画布或框架上,但是如果该命令是从类中的另一个函数运行的,我应该如何做呢?我在类板中使用了一些函数进行了尝试,但随后出现了一个错误,即标签、画布等没有定义,因为在Python 使用按钮命令移动tkinter标签,python,class,tkinter,label,Python,Class,Tkinter,Label,我正在尝试使用python和tkinter重新创建boardgame垄断。我知道如何将标签放置在画布或框架上,但是如果该命令是从类中的另一个函数运行的,我应该如何做呢?我在类板中使用了一些函数进行了尝试,但随后出现了一个错误,即标签、画布等没有定义,因为在\uuuu init\uuuu(self,parent)中发生了这种情况。如何解决这些错误?还是我应该采取不同的方法?希望我把问题说清楚 import tkFileDialog from random import randint class
\uuuu init\uuuu(self,parent)
中发生了这种情况。如何解决这些错误?还是我应该采取不同的方法?希望我把问题说清楚
import tkFileDialog
from random import randint
class Board(Frame):
def __init__(self,parent):
##create the board
frame = Frame(parent)
frame.pack()
Frame.__init__(self,parent)
frame2 = Frame(frame)
frame2.pack()
c=Canvas(frame2,width=480,height=480)
c.pack(expand=YES,fill=BOTH)
c.background=PhotoImage(file='Board.gif')
c.create_image(0,0,image=c.background,anchor='nw')
##Add player 1
player1=PhotoImage(file='plane.gif')
label_player1 = Label(c,image=player1)
label_player1.image=player1
label_player1.place(x=430,y=420)
##Add player 2
player2=PhotoImage(file='car.gif')
label_player2 = Label(c,image=player2)
label_player2.image=player2
label_player2.place(x=430,y=450)
button = Button(frame, text="Next turn", command=self.next_turn)
button.pack()
button = Button(frame, text="Roll the dice", command=self.roll)
button.pack()
def roll(self):
number=randint(2,12)
if b==0:
self.place_player_down()
return number
def place_player_down(self):
for i in range(number+1):
h=int(430-i*30)
while h>=0:
player2=PhotoImage(file='car.gif')
label_player2 = Label(c,image=player2)
label_player2.image=player2
label_player2.place(x=h,y=420)
root = Tk()
board = Board(root)
board.pack()
root.mainloop()
这种方法是正确的(将Tkinter小部件包装在一个类中,并将事件处理程序函数作为方法),但是您忘记了使用对self
的引用将小部件设置为类的属性:
class Board(Frame):
def __init__(self,parent):
# ...
self.c = Canvas(frame2,width=480,height=480)
self.c.pack(expand=YES,fill=BOTH)
# ...
def place_player_down(self):
# Use 'self.c', not just 'c'
我认为您希望对值number
执行类似的操作,但如果是这种情况,我会将其作为参数发送到place\u player\u down
:
def roll(self):
number=randint(2,12)
if b==0:
self.place_player_down(number)
return number # Keep in mind that this value is returned but not used anymore
def place_player_down(self, number):
# Use 'number'
这确实奏效了。将init中的几乎所有内容都设置为self。“”使其正常工作。谢谢!