2

我正在使用 Tkinter 制作一个程序,其中用户以磅为单位输入他们的体重,然后以公斤为单位输出他们的体重。

我在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()
4

3 回答 3

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,您可能还想设置一个例外。

于 2012-10-29T10:54:33.590 回答
5

你正在寻找的是[widget].get()

文本小部件

如果您使用 Text 小部件,则必须使用[widget].get(1.0, END)where1.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()
于 2014-08-10T19:46:12.313 回答
4

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

请参阅此处了解更多信息。

于 2012-10-29T00:18:15.597 回答