如何在Python中将条目设置为Entry?

时间:2014-09-28 06:19:32

标签: python tkinter tkinter-entry

我正在努力获取python / tkinter标签小部件来更新其内容。根据今天的早期帖子,我按照如何组合小部件的说明进行操作。但是,在运行时,当我单击按钮Calculeaza时,标签小部件不会更改内容。据我所知,函数Calculeaza()是错误的。

def Calculeaza(self):
    cgrade =celsiusEntry.get()
    if cgrade == ' ':
        fahrenheitEntry.configure(text = ' ')
    else:
        cgrade=float(cgrade)
        fgrade=(cgrade-32)/1.8
        fahrenheitEntry.configure(text=str(fgrade))# is not function

这是代码:

    import sys
from Tkinter import *

class C2F(Frame):
    #celsiusEntry = Entry
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.initUI()

    def initUI(self):
        self.parent.title("Convertor Celsius/Fahrenheit")
        self.pack(fill=BOTH, expand=1)
        # Meniul superior cu File>Exit si Help>About 
        menuBar= Menu(self.parent)
        self.parent.config(menu=menuBar)
        fileMenu= Menu(menuBar)
        fileMenu.add_command(label="Exit", command = self.onExit)
        menuBar.add_cascade(label="File", menu=fileMenu)
        # Adaugare butoane http://effbot.org/tkinterbook/grid.htm
        """
        Label(self.parent, text="First").grid(row=0, column =0)
        Label(self.parent, text="First").grid(row=1, column = 0)
        """
        labelframe = LabelFrame(self.parent, text="Celsius/Fahrenheit")
        labelframe.pack(fill="both", expand="yes")
        left = Label(labelframe, text="Celsius")
        left.grid(row=0, column=0)
        Label(labelframe, text="Fahrenheit").grid(row=1, column =0)

        global celsiusEntry
        celsiusEntry=Entry(labelframe, bd=5)
        celsiusEntry.grid(row=0, column=1)

        global fahrenheitEntry
        fahrenheitEntry=Entry(labelframe, bd=5, text="salut")
        fahrenheitEntry.grid(row=1, column=1)

        calcButon = Button(labelframe, text="Calculeaza", command=self.Calculeaza)
        calcButon.grid(row=1, column=2)

    def onExit(self):
        self.parent.quit()

    def Calculeaza(self):
        cgrade =celsiusEntry.get()
        if cgrade == ' ':
            fahrenheitEntry.configure(text = ' ')
        else:
            cgrade=float(cgrade)
            fgrade=(cgrade-32)/1.8
            fahrenheitEntry.config(text=str(fgrade))# is not function

def main():
    root= Tk()
    root.geometry("350x350+300+300")
    app= C2F(root)
    #Label(root, text="First").grid(row=0, column =0)
    root.mainloop()

if __name__ == "__main__":
    main()

2 个答案:

答案 0 :(得分:0)

import sys
from tkinter import *

class C2F(Frame):

def __init__(self, parent):
    Frame.__init__(self, parent)
    self.parent = parent
    self.initUI()

def initUI(self):
    self.parent.title("Convertor Celsius/Fahrenheit")
    self.pack(fill=BOTH, expand=1)
    # Meniul superior cu File>Exit si Help>About 
    menuBar= Menu(self.parent)
    self.parent.config(menu=menuBar)
    fileMenu= Menu(menuBar)
    fileMenu.add_command(label="Exit", command = self.onExit)
    menuBar.add_cascade(label="File", menu=fileMenu)
    # Adaugare butoane http://effbot.org/tkinterbook/grid.htm
    """
    Label(self.parent, text="First").grid(row=0, column =0)
    Label(self.parent, text="First").grid(row=1, column = 0)
    """
    labelframe = LabelFrame(self.parent, text="Celsius/Fahrenheit")
    labelframe.pack(fill="both", expand="yes")
    celsuisLabel = Label(labelframe, text="Celsius")
    fahrenheitLabel = Label(labelframe, text="Fahrenheit")
    celsuisLabel.grid(row=0, column=0)
    fahrenheitLabel.grid(row=1, column =0)

    self.celsius = StringVar()
    self.fahrenheit = StringVar()

    self.celsiusEntry=Entry(labelframe, bd=5,textvariable=self.celsius)
    self.celsiusEntry.grid(row=0, column=1)

    self.fahrenheitEntry=Entry(labelframe, bd=5,textvariable=self.fahrenheit)
    self.fahrenheitEntry.grid(row=1, column=1)

    calcButon = Button(labelframe, text="Calculeaza", command=self.Calculeaza)
    calcButon.grid(row=1, column=2)

def onExit(self):
    self.parent.quit()

def Calculeaza(self):
    cgrade =self.celsius.get()
    if cgrade == '':
        self.fahrenheit.set('')
    else:
        cgrade=float(cgrade)
        fgrade=(cgrade-32)/1.8
        self.fahrenheit.set(str(fgrade))

def main():
    root= Tk()
    root.geometry("350x350+300+300")
    app= C2F(root)
    #Label(root, text="First").grid(row=0, column =0)
    root.mainloop()

if __name__ == "__main__": main()`

更正:

1-您无需创建全局变量。只需使用self创建对它的引用。 2-要操作Entry小部件中的数据,首先需要创建一个变量(StringVar或IntVar或DoubleVar,它们是python变量的tkinter等价物)。设置变量后,您需要将其“映射”到Entry小部件。这样做可以让您以编程方式获取或设置条目小部件内容。

干杯:)

答案 1 :(得分:0)

条目窗口小部件没有set方法。如果您正在阅读一些说明的文档,您可能需要联系作者告诉他们这些文档是正确的。

对于条目小部件,您有两个选择。一,如果你有一个textvariable关联,你可以在textvariable上调用set。这将导致更新与textvariable关联的所有小部件。其次,如果没有textvariable,您可以使用insertdelete方法替换窗口小部件中的内容。

以下是后者的一个例子:

fahrenheitEntry.delete(0, "end")
fahrenheitEntry.insert(0, cgrade)