我正在努力获取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()
答案 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
,您可以使用insert
和delete
方法替换窗口小部件中的内容。
以下是后者的一个例子:
fahrenheitEntry.delete(0, "end")
fahrenheitEntry.insert(0, cgrade)