【问题标题】:Tkinter Button will not create due to error in function由于功能错误,无法创建 Tkinter 按钮
【发布时间】:2014-07-12 16:14:57
【问题描述】:

我对 Python 很陌生,尤其是对使用 Tkinter 很陌生。我有一个关于让我的按钮在 GUI 中实际创建的问题。

我正在尝试制作一个基本按钮,该按钮将从输入框中获取输入作为整数并将其添加到当前余额(一种小型银行应用程序)。问题是,当我运行代码并单击存款按钮时,应该生成的第二个“存款”按钮(在 make_deposit() 函数中定义)将不会生成,因为输入输入框变成一个整数。据我所知,这个错误只是因为第二个“存款”按钮在按下按钮之前试图运行它的功能。有什么办法可以防止这种情况发生吗?下面是代码,不包括与当前问题无关的程序部分。

from Tkinter import *

def get_entry(entry):
    global s 
    s = entry.get()
    s = int(s)
    data["current"] += s   
    label = Label(root, text = "Current Balance: %d" % (data["current"]))
    label.grid(row = 1, column = 0)


def make_deposit():
    deposit = Entry(root, text = "Deposit Amount")
    deposit.grid(row = 2, column = 0)
    withdrawal.grid_forget()
    deposit_button = Button(root, text = "Make Deposit", command = get_entry(deposit))
    deposit_button.grid(row = 3, column = 0) 

frame = Frame(root, height = 300, width = 300)
frame.grid(row = 1, column = 0)

label = Label(root, text = "ETA Until Car Purchase")
label.grid(row = 0, column = 0)

label = Label(root, text = "Current Balance: %d" % (data["current"]))
label.grid(row = 1, column = 0)

deposit = Button(root, text = "Make Deposit", command = make_deposit)
deposit.grid(row = 2, column = 0)

withdrawal = Button(root, text = "Make Withdrawal")
withdrawal.grid(row = 3, column = 0)

任何帮助将不胜感激,请考虑到我是 Tkinter 的绝对初学者,所以我创建一些 GUI 元素的方式可能不是最好的方式。

【问题讨论】:

  • 总是添加full error message 并且有很多行有问题所以在你的代码中标记这一行。
  • 如果您有问题,请使用print 查看变量中的内容(在您提问之前)。
  • 顺便说一句:您忘记创建 root (root = Tk()) 并且忘记运行 mainloop (root.mainloop())

标签: python button user-interface tkinter


【解决方案1】:

command= 期望没有() 和参数的函数名。

使用

command = get_entry(deposit)

您运行函数get_entry(deposit),并将其结果分配给command=
如果您想动态地将功能分配给command=,那就太好了。

但是你需要lambda:

command = lambda: get_entry(deposit)

【讨论】:

  • 非常感谢!像魅力一样工作!
  • 顺便说一句:当您在 for 循环中使用 lambda 时,请注意 command=。大多数初学者在for i in... ; command=lambda:function( i ) 中遇到i 的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
相关资源
最近更新 更多