【问题标题】:Set a integer limit in a entry widget in tkinter (python)在 tkinter (python) 的条目小部件中设置整数限制
【发布时间】:2012-04-11 04:00:58
【问题描述】:

我该如何做到,如果有人输入一个大于 3000 的数字,它会打印出一条自定义消息,而不是计算该特定数字的阶乘?

我试过“如果数字 > 3000,打印“等等等等”,但它不起作用。认为它与 tkinter 有关。

from Tkinter import *
import tkMessageBox, os

#calculates factorial of inputNumber
def calculate():
    number = inputNumber.get()
    inputNumber.delete(0, END)
    product = 1
    for i in range(int(number)):
        product = product * (i+1)
    facAnswer.delete(1.0, END)
    facAnswer.insert(END, product)

cal = Tk()
cal.title("Factorial Calculator")
cal.geometry('450x300+200+200')

#Enter the number you want the factorial of 
factorialNumber = IntVar()
inputNumber = Entry(cal, textvariable=factorialNumber)
inputNumber.pack()

#executes calculate function by pressing button
enterButton= Button(cal, text="CALCULATE!", width=20,command=calculate)
enterButton.pack(side='bottom',padx=15,pady=15)

#Where the answer appears:
facAnswer = Text(cal)
facAnswer.insert(END, "Answer:")
facAnswer.pack()

cal.mainloop()

【问题讨论】:

  • 定义“打印输出”。您希望消息出现在哪里?
  • 在 facAnswer 中,文本小部件
  • print 语句将内容放在标准输出上。它应该如何知道 Text 小部件存在,更不用说您希望文本出现在一个中,更不用说是哪一个了?
  • 您是否尝试调用facAnswer.insert 并显示错误消息,而不是计算结果?
  • 是的,我做了,它什么也没做,只是继续计算阶乘

标签: python integer tkinter limit


【解决方案1】:

这似乎对我有用。你可以把所有东西都放在一个类中,
并尝试在factorialNumber 上使用get(),看看是否会有所不同。

import Tkinter as tk

class GUI(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        self.title("Factorial Calculator")
        self.geometry('450x300+200+200')

    # Enter the number you want the factorial of
        self.factorialNumber = tk.IntVar()
        self.inputNumber = tk.Entry(self, textvariable=
                                    self.factorialNumber)
        self.inputNumber.pack()

    # executes calculate function by pressing button
        enterButton= tk.Button(self, text="CALCULATE!",
                                width=20,command=self.calculate)
        enterButton.pack(side='bottom',padx=15,pady=15)

    # Where the answer appears
        self.facAnswer = tk.Text(self)
        self.facAnswer.insert('end', "Answer:")
        self.facAnswer.pack()


    def calculate(self):
        number = self.factorialNumber.get()
        if number > 3000:
            print('The number is out of range.')
        else:
            self.inputNumber.delete(0, 'end')
            product = 1
            for i in range(int(number)):
                product = product * (i+1)
            self.facAnswer.delete(1.0, 'end')
            self.facAnswer.insert('end', product)


gui = GUI()
gui.mainloop()

【讨论】:

  • @user1323395 我可能误解了你想要做什么,我更新了方法。
  • 嗯...我试了一下,我得到一个属性错误。我对此很陌生,所以我不知道这意味着什么......
  • @user1323395 听起来你没有放自我。在计算方法中尝试操作的东西的前缀。
  • 嗯,我也尝试复制您发送给我的确切代码,但它仍然给了我一个。
  • @user1323395 啊,当我更新计算方法时,它没有正确缩进。它现在可以工作了。
猜你喜欢
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
相关资源
最近更新 更多