如何从Tkinter获取输入

时间:2012-10-29 00:06:31

标签: python tkinter

我正在使用Tkinter创建一个程序,用户在Pound中输入它们的重量,然后以千克输出它们的重量。

我在从用户处获取Entry的内容时遇到问题。 我在clicked1计算英镑到公斤。

有人可以告诉我如何获得Entry输入吗?

from Tkinter import *
import tkMessageBox

class App(object):
    def __init__(self):
        self.root = Tk()
        self.root.wm_title("Question 7")
        self.label = Label (self.root, text= "Enter your weight in pounds.")
        self.label.pack()

        self.entrytext = StringVar()
        Entry(self.root, textvariable=self.entrytext).pack()

        self.buttontext = StringVar()
        self.buttontext.set("Calculate")
        Button(self.root, textvariable=self.buttontext, command=self.clicked1).pack()

        self.label = Label (self.root, text="")
        self.label.pack()

        self.root.mainloop()

    def clicked1(self):
        input = 3423 #I would like the user input here.
        self.label.configure(text=input)

    def button_click(self, e):
        pass

App()

3 个答案:

答案 0 :(得分:6)

这是你要找的那种东西吗?

from Tkinter import *
import tkMessageBox

class App(object):
    def __init__(self):
        self.root = Tk()
        self.root.wm_title("Question 7")
        self.label = Label (self.root, text= "Enter your weight in pounds.")
        self.label.pack()


        self.entrytext = StringVar()
        Entry(self.root, textvariable=self.entrytext).pack()

        self.buttontext = StringVar()
        self.buttontext.set("Calculate")
        Button(self.root, textvariable=self.buttontext, command=self.clicked1).pack()

        self.label = Label (self.root, text="")
        self.label.pack()

        self.root.mainloop()


    def clicked1(self):
        input = self.entrytext.get()
        result = int(input)*2
        self.label.configure(text=result)

    def button_click(self, e):
        pass

App()

我认为这正是你所寻找的,尽管不仅仅是2点。 如果值不是int,您可能还想要输入异常。

答案 1 :(得分:5)

您要找的是[widget].get()

文本小部件

如果您使用文本小部件,则必须使用[widget].get(1.0, END),其中1.0表示“第一行,第0个字符”

代码审查

我注意到代码中的其他一些内容可以改进:

  • PEP8符合;见pep8online.com
  • 如果添加Shebang,Linux用户将可以使用./script.py直接执行。
  • 变量命名:
    • input是一个内置函数,你应该避免覆盖它
    • 使用有意义的变量名称(如果扩展程序,entrytext可能会出现问题)
  • 避免使用from Tkinter import *。这可能会导致意外的命名冲突。

完整代码

##!/usr/bin/env python

import Tkinter as Tk


class App(object):
    def __init__(self):
        self.root = Tk.Tk()
        self.root.wm_title("Question 7")
        self.label = Tk.Label(self.root, text="Enter your weight in pounds.")
        self.label.pack()

        self.weight_in_kg = Tk.StringVar()
        Tk.Entry(self.root, textvariable=self.weight_in_kg).pack()

        self.buttontext = Tk.StringVar()
        self.buttontext.set("Calculate")
        Tk.Button(self.root,
                  textvariable=self.buttontext,
                  command=self.clicked1).pack()

        self.label = Tk.Label(self.root, text="")
        self.label.pack()

        self.root.mainloop()

    def clicked1(self):
        weight_in_kg = self.weight_in_kg.get()
        self.label.configure(text=weight_in_kg)

    def button_click(self, e):
        pass

App()

答案 2 :(得分:4)

由于您已将StringVarEntry窗口小部件相关联,因此您可以使用StringVar的get和set方法轻松访问/操作窗口小部件的文本。

有关详细信息,请参阅here