无法使用input()

时间:2015-04-28 16:01:14

标签: python tkinter

我正在尝试使用python 3.4.2在Windows 8.1中编写一个简单的python gui 我尝试制作一个程序来计算浓度(摩尔浓度=摩尔/升),但在GUI中我创建了没有答案出现在文本小部件中但数字出现在命令外壳中。
计算也似乎不起作用,因为当我离开条目时,空的东西被计算出来(这应该是不可能的,即使空的条目将评估为0它不应该除以0)它给了我这些数字.56494480.56494448

我认为问题出在本部分

def mol(self):
    moli = float(input(self.grammi)) / float(input(self.peso_molecolare))
    self.text.delete(0.0, END)
    self.text(0.0, moli)


def mola(self):
    conc = float(float(input(self.grammi)/ float(input(self.peso_molecolare))) / float(input(self.litri))

    self.text.delete(0.0, END)
    self.text.insert(0.0, conc)

如果你想要这里的整个代码,那就是

from tkinter import *


class Application(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        self.instuction = Label(self, text="inserisci i seguenti dati")
        self.instuction.grid(row=0, column=0, columnspan=2, sticky=W)
        self.grammi = Entry(self)
        self.grammi.label = Label(self, text="grammi")
        self.grammi.grid(row=1, column=1, sticky=W)
        self.grammi.label.grid(row=1, column=0, sticky=W)
        self.peso_molecolare = Entry(self)
        self.peso_molecolare.label = Label(self, text="peso molecolare")
        self.peso_molecolare.grid(row=2, column=1, sticky=W)
        self.peso_molecolare.label.grid(row=2, column=0, sticky=W)
        self.litri = Entry(self, text="litri")
        self.litri.label = Label(self, text="litri")
        self.litri.grid(row=3, column=1, sticky=W)
        self.litri.label.grid(row=3, column=0, sticky=W)

        self.moli_button = Button(self, text="calcolo moli", command=self.mol)
        self.moli_button.grid(row=2, column=2, sticky=W)
        self.conc_button = Button(self, text="concentrazione", command=self.mola)
        self.conc_button.grid(row=3, column=2, sticky=W)
        self.exit_button = Button(self, text="Exit", command=self.close_window)
        self.exit_button.grid(row=4, column=2, sticky=W)

        self.text = Text(self, width=35, height=5, wrap=NONE)
        self.text.grid(row=4, column=0, columnspan=2, sticky=W)

    def mol(self):
        moli = float(input(self.grammi)) / float(input(self.peso_molecolare))
        self.text.delete('1.0', END)
        self.text.insert('1.0', moli)


    def mola(self):
        conc = float(float(input(self.grammi)) / float(input(self.peso_molecolare))) / float(input(self.litri))
        self.text.delete('1.0', END)
        self.text.insert('1.0', conc)

    def close_window(self):
        root.destroy()


root = Tk()
root.title("chimica")
root.geometry("400x200")
app = Application(root)
root.mainloop()

2 个答案:

答案 0 :(得分:2)

使用Tkinter,要在Entry小部件中插入值,您不应该使用input,但必须使用get方法,如:

moli = float(self.grammi.get()) / float(self.peso_molecolare.get())
{p>同样适用于conc

conc = float(self.grammi.get()) / float(self.peso_molecolare.get()) / float(self.litri.get())

您遇到的问题是,在询问括号之间的问题后,input将在命令shell中提示用户输入。但是,您在那里放置了对Entry小部件的引用。因此,打印的内容(.56494480.56494448)是对这些小部件的内部引用,而不是任何计算的结果。

答案 1 :(得分:0)

我必须假设你正在使用Tkinter。可能是行号从1开始,你在第0行插入。另外,索引是字符串,而不是浮点数。

尝试将代码更改为:

def mol(self):
    moli = float(input(self.grammi)) / float(input(self.peso_molecolare))
    self.text.delete('1.0', END)
    self.text.insert('1.0', moli)

def mola(self):
    conc = float(float(input(self.grammi)) / float(input(self.peso_molecolare))) / float(input(self.litri))
    self.text.delete('1.0', END)
    self.text.insert('1.0', conc)

或者您可以使用self.text.insert(INSERT, conc)来插入当前插入点。