更新Tkinter画布上的文本字段

牛棚

第一次,我在Python中使用tkinter创建了一个GUI。我使用过wxPython,但没有遇到同样的问题,但是我从未使用过画布。画布背后的思考过程是最终添加动画。我创建了一个网格布局,其中一个网格是画布。我正在尝试使用itemconfig更新分数字段,但没有运气,无法在画布上更新两个分数字段。我的代码如下。关于如何更新画布上的两个分数的任何建议?我希望在新分数写入屏幕之前删除旧分数。谢谢参观。请原谅全局变量,并在此过程中将其删除。

class Gui(Frame):
def __init__(self, root):
    self.root=root
    self.initUI()

def initUI(self):
    global score1, score2   # these are ints
    score1str = str(score1)
    score2str = str(score2)

    root.title("Table Tennis Scoreboard")

    self.canvas = Canvas(root, width=640, height=480, background='green')
    self.canvas.grid(row=0,column=1)

    self.canvas.create_text(185, 90, anchor=W, font=('Calibri', 20),
                                             text="Let's play Table Tennis!")

    self.canvas.create_rectangle(75, 120, 275, 320, outline="red", fill="red")
    self.canvas.create_rectangle(370, 120, 565, 320, outline="blue", fill="blue")

    self.canvas.create_text(125, 130, anchor=W, font=('Calibri', 20),
                                             text="Player 1")
    self.canvas.create_text(425, 130, anchor=W, font=('Calibri', 20),
                                             text="Player 2")

    self.score1_id = self.canvas.create_text(135, 250, anchor=W, font=('Arial', 100),
                                             text=score1str)
    self.score2_id = self.canvas.create_text(435, 250, anchor=W, font=('Arial', 100),
                                             text=score2str)

    frame = Frame(self.root, relief=RAISED, borderwidth=2, background='white')
    frame.grid(row=0,column=0)

    p1up = Button(frame,text="Player1 +1", height=2, width=10, background='red', command=self.add('one'))
    p1up.grid(row = 0,column = 0, padx=10, pady=(20,5))
    p1down = Button(frame,text="Player1 -1", height=2, width=10, background='red', command=self.subtract('one'))
    p1down.grid(row = 1,column = 0, padx=10, pady=(5,100))
    p2up = Button(frame,text="Player2 +1", height=2, width=10, background='blue', command=self.add('two'))
    p2up.grid(row = 3,column = 0, padx=10, pady=5)
    p2down = Button(frame,text="Player2 -1", height=2, width=10, background='blue', command=self.subtract('two'))
    p2down.grid(row = 4,column = 0, padx=10, pady=(5,100))
    reset = Button(frame,text="Reset", height=2, width=10, command=self.new_game())
    reset.grid(row = 6,column = 0, padx=10, pady=(5,20))

def new_game(self):
    global score1, score2   # these are ints
    score1 = 0
    score2 = 0
    self.update_score()

def add(self, player):
    global score1, score2  # these are ints
    self.player = player
    if self.player == 'one':
        #if score1 < 11:
        score1 += 1
    elif self.player == 'two':
        #if score2 < 11:
        score2 += 1
    self.update_score()
    return

def subtract(self, player):
    global score1, score2  # these are ints
    self.player = player
    if self.player == 'one':
        if score1 > 0:
            score1 = score1 - 1
    elif self.player == 'two':
        if score2 > 0:
            score2 -= 1
    self.update_score()
    return

def update_score(self):
    global score1, score2   # these are ints

    score1str = str(score1)
    score2str = str(score2)

    self.canvas.itemconfig(self.score1_id, text=score1str)
    self.canvas.itemconfig(self.score2_id, text=score2str)

    return

if __name__== '__main__':
    root=Tk()
    gui=Gui(root)
    root.mainloop()
fhdrsdg

问题在于您没有将功能分配给按钮,而是返回了函数调用的值。例如:

  reset = Button(frame,text="Reset", height=2, width=10, command=self.new_game())

分配None给命令,因为这就是self.new_game()返回的内容。您应该将其更改为:

  reset = Button(frame,text="Reset", height=2, width=10, command=self.new_game)

它将功能分配给self.new_game按钮的命令,而不是None

然后,对于其他按钮,要将参数传递给按钮的命令,则应使用lambda函数,例如:

 p1up = Button(frame,text="Player1 +1", height=2, width=10, background='red', command=lambda: self.add('one'))

这分配了一个匿名函数,该函数调用self.add('one')按钮的命令。

另请参阅:为什么在声明时执行Button参数“命令”?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

画布上的SWT可编辑文本字段

来自分类Dev

从文本字段设置画布大小

来自分类Dev

文本字段未更新

来自分类Dev

使用字段SQL中的当前文本更新多行上的文本字段

来自分类Dev

Python Tkinter只读文本字段

来自分类Dev

文本字段扩展未更新屏幕上的文本 (swfit4)

来自分类Dev

reactjs中文本字段更新的问题

来自分类Dev

当文本字段更新时触发 APEX

来自分类Dev

捕获文本字段上的TextChanged

来自分类Dev

文本字段上的抖动光标位置

来自分类Dev

在文本字段上添加签名 - itextsharp

来自分类Dev

如何防止文本在tkinter画布上重叠

来自分类Dev

如何在Tkinter画布上更新情节?

来自分类Dev

如何在Tkinter画布上更新情节?

来自分类Dev

当所有文本字段在SwiftUI中都具有值时,如何动态更新屏幕上的标签?

来自分类Dev

单击按钮即可更新输入文本字段

来自分类Dev

如何使用列表框更新文本字段

来自分类Dev

我的JS / JQuery不会更新我的文本字段值

来自分类Dev

文本字段值未及时更新以保存textFieldDidEndEditing

来自分类Dev

在Swift iOS中更新文本字段ui

来自分类Dev

文本字段中的JavaScript时间且未更新

来自分类Dev

使用复选框更新输入文本字段

来自分类Dev

我的JS / JQuery不会更新我的文本字段值

来自分类Dev

文本字段中的JavaScript时间且未更新

来自分类Dev

使用复选框更新输入文本字段

来自分类Dev

jQuery文本字段在foreach Razor中更新

来自分类Dev

更新自动布局约束以重新定位文本字段

来自分类Dev

不要将所有文本字段更新为 firebase

来自分类Dev

JQuery Bootstrap Modal 自动计算文本字段不更新