【问题标题】:Making an if statement with 2 int variables. Python 3.7 Tkinter使用 2 个 int 变量创建 if 语句。 Python 3.7 Tkinter
【发布时间】:2019-12-23 20:44:37
【问题描述】:

我正在尝试从 Tkinter 的输入框中使用 2 个数字创建一个 if 语句。当我比较这 2 个数字时,我收到一条错误消息,指出我要比较的 2 个变量是函数。是否可以将这些函数变成变量?我试过 var = int(var)、IntVar 和 var = float(var),但都不起作用。

代码

from tkinter import *
root = Tk()
root.title("Who Is More Fat?")
root.geometry("800x600")

# LABELS
font1, font2, font3 = "arial 30 bold", "arial 18 bold", "arial 18"
Label(root, text="Welcome to the Who's More Fat Program", font=font1,
      fg="steelblue").place(x=0, y=0)

Label(root, text="Enter first persons name: ", font=font2,
      fg="black").place(x=10, y=200)

Label(root, text="Enter first persons weight: ", font=font2,
      fg="black").place(x=10, y=240)

Label(root, text="Enter second persons name: ", font=font2,
      fg="black").place(x=10, y=300)

Label(root, text="Enter second persons weight: ", font=font2,
      fg="black").place(x=10, y=340)

# TEXT BOXES
entry_box1 = Entry(root, width=25, font=font3, bg="white")
entry_box1.place(x=400, y=200)

entry_box2 = Entry(root, width=25, font=font3, bg="white")
entry_box2.place(x=400, y=240)

entry_box3 = Entry(root, width=25, font=font3, bg="white")
entry_box3.place(x=400, y=300)

entry_box4 = Entry(root, width=25, font=font3, bg="white")
entry_box4.place(x=400, y=340)

entry_box2 = float(entry_box2)
entry_box4 = float(entry_box4)

def calc():
     if float(entry_box2.get()) > float(entry_box4.get()):
        answer.delete(0, END)
        answer.insert(0, entry_box1.get() + " is the Fattest")
    else:
        answer.delete(0, END)
        answer.insert(0, entry_box3.get() + " is the Fattest")

# CALCULATE BUTTON

Button(root, text="Calculate the Fattest!", font=font2, bg="white", command=calc).place(x=5, y=390)

Label(root, text="Answer:", font=font2).place(x=290, y=400)
answer = Entry(root, font=font3, width=25, bg="white")
answer.place(x=400, y=400) 

追溯

Traceback (most recent call last):
File "C:\Users\Liam\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in 
__call__
return self.func(*args)
File "C:/Users/Liam/PycharmProjects/untitled/window.py", line 39, in calc
if entry_box2.get > entry_box4.get:
TypeError: '>' not supported between instances of 'function' and 'function'

【问题讨论】:

  • 在你的代码中,你写了entry_box2.get(),而回溯说entry_box2.get
  • 完全正确 ^ 您刚刚复制了上一个问题的回溯
  • @LiamWelsh,看起来您正在运行window.py,但正在编辑fat.py。或者您忘记保存文件。错误信息与您的代码不匹配,这是不可能的
  • 哇,我觉得自己像个白痴。但是,Tkinter 窗口现在甚至都不会打开。它只是说该过程已完成。

标签: python python-3.x tkinter python-3.7


【解决方案1】:

我已经添加了主循环,我已经删除了

entry_box2 = float(entry_box2)
entry_box4 = float(entry_box4)

它有效:

from tkinter import *
root = Tk()

root.title("Who Is More Fat?")
root.geometry("800x600")

# LABELS
font1, font2, font3 = "arial 30 bold", "arial 18 bold", "arial 18"
Label(root, text="Welcome to the Who's More Fat Program", font=font1,
  fg="steelblue").place(x=0, y=0)

Label(root, text="Enter first persons name: ", font=font2,
  fg="black").place(x=10, y=200)

Label(root, text="Enter first persons weight: ", font=font2,
  fg="black").place(x=10, y=240)

Label(root, text="Enter second persons name: ", font=font2,
  fg="black").place(x=10, y=300)

Label(root, text="Enter second persons weight: ", font=font2,
  fg="black").place(x=10, y=340)

# TEXT BOXES
entry_box1 = Entry(root, width=25, font=font3, bg="white")
entry_box1.place(x=400, y=200)

entry_box2 = Entry(root, width=25, font=font3, bg="white")
entry_box2.place(x=400, y=240)

entry_box3 = Entry(root, width=25, font=font3, bg="white")
entry_box3.place(x=400, y=300)

entry_box4 = Entry(root, width=25, font=font3, bg="white")
entry_box4.place(x=400, y=340)


def calc():
    if float(entry_box2.get()) > float(entry_box4.get()):
        answer.delete(0, END)
        answer.insert(0, entry_box1.get() + " is the Fattest")
    else:
        answer.delete(0, END)
        answer.insert(0, entry_box3.get() + " is the Fattest")

# CALCULATE BUTTON

Button(root, text="Calculate the Fattest!", font=font2, bg="white", 
command=calc).place(x=5, y=390)

Label(root, text="Answer:", font=font2).place(x=290, y=400)
answer = Entry(root, font=font3, width=25, bg="white")
answer.place(x=400, y=400) 

root.mainloop()

【讨论】:

  • 非常感谢!我对 python 和一般编程非常陌生,并且有点超出了我的界限,试图将它变成一个 GUI。但是,一旦我开始做某事,我就会下定决心完成它。你能更详细地解释一下你做了什么,以便我理解吗?编辑:我明白你所说的主循环是什么意思,我的代码中确实有它,但没有完全复制它。
  • mainloop () 是窗口等待所必需的,entry_box2 = float(entry_box2)entry_box4 = float(entry_box4) 没用
  • @LiamWelsh,无法将Entry 引用的entry_boxes 对象转换为浮点数:entry_box2 = float(entry_box2) TypeError: float() argument must be a string or a number, not 'Entry'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 2014-04-11
  • 2020-10-29
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多