我目前正在开发一个将华氏转换为Celcius并以不同方式显示它的GUI。如果Celcius最终为正(+3),则窗口将变为红色。如果温度为负(-58),窗口将变为紫色。我设法用一个正确转换的按钮对基本窗口进行编码,但我无法让窗口更改标签。
它应该从绿色主窗口转到“转换温度:”并显示结果。
也许你可以帮我解决这个问题。现在发布代码。
#GUI for the fahrenheit calculator.
import tkinter
class MyConverterGUI:
def __init__(self):
self.main_window = tkinter.Tk()
self.top_frame = tkinter.Frame()
#self.mid_frame = tkinter.Frame()
self.bottom_frame = tkinter.Frame()
self.main_window.title("Konverterare")
self.main_window.geometry("350x350")
self.label1 = tkinter.Label(self.top_frame, text= 'Fahrenheit till Celcius-konverterare' '\n' 'Skriv in ett tal och tryck på Omvandla' , \
width = 90, height = 20, bg = "green")
self.label1.pack()
self.prompt_label = tkinter.Label(self.bottom_frame, text= "Skriv in en temperatur(f) här ---->")
self.fhentry = tkinter.Entry(self.bottom_frame, width = 10)
self.prompt_label.pack(side="left")
self.fhentry.pack(side="left")
self.value = tkinter.StringVar()
self.c_label = tkinter.Label(self.top_frame, textvariable = self.value)
self.value.set("Graderna omvandlade: ")
self.c_label.pack()
self.calc_button = tkinter.Button(self.bottom_frame, text ="Omvandla", bg ="purple", command=self.convert, \
height = 2, width = 17)
self.calc_button.pack(side="right")
self.top_frame.pack()
#self.mid_frame.pack()
self.bottom_frame.pack()
tkinter.mainloop()
def ersattEtikett(self):
self.nyText=convert()
self.bytText.set(nytext)
def importera(self):
self.fahrenheit = float(self.fhentry.get())
return self.fahrenheit
def convert(self):
self.fahrenheit = self.importera()
self.Celcius = float(self.fahrenheit - 32)*(5/9)
self.Celcius = round(self.Celcius, 2)
print ("Detta funkade fint", self.Celcius)
return self.Celcius
my_converter = MyConverterGUI()
答案 0 :(得分:2)
首先,我不知道转换的工作原理如何:
def ersattEtikett(self):
self.nyText = self.convert() #Shouldn't it be `self.convert()`???
self.bytText.set(nytext)
现在,只要设置更改标签的背景,您需要做的就是使用config
方法:
self.whatever_label_here.config(bg='red')
使用.config
,您可以更改可在构造函数中设置的属性。例如:
self.label1.config(text="This is the new label text",bg="green")
最后,作为风格的说明:
self.calc_button = tkinter.Button(self.bottom_frame, text ="Omvandla", bg ="purple", command=self.convert, \
height = 2, width = 17)
在上一行中,反斜杠(\
)完全没必要。 Python将自动继续任何类型的括号未关闭的行 -
mylist = [ 1,
2,
3 ]
完全有效(虽然我不是说你应该用这种方式编写所有列表!)。原样:
mydict = { 'foo': 'bar',
'bar': 'baz',
'baz': 'qux' }
原样:
mycallable(foo,
bar,
baz,
qux="A cat in a hat")
旁白 - 快速了解self
您可以通过“调用”类来创建类的实例:
foo = MyClass()
现在,您可以通过调用foo
来调用方法:
bar = foo.method()
请注意,要访问该方法,您需要知道foo
。 bar = method()
不起作用(你也不期望它)。那么,如果你想从foo
内的另一个方法调用foo
内的方法,这是如何工作的?这就是self
的用武之地:考虑以下类定义:
class MyClass(object):
def __init__(self):
self.bar = 'baz'
def method(self):
print( "ID of self:", id(self) )
return self.method2()
def method2(self):
self.bar = 'qux'
return self.bar
foo = MyClass()
print ( "ID of foo:", id(foo) )
foo.method()
请注意,foo
的ID与self
的ID相同。换句话说,foo
作为第一个参数传递给它的方法(我们将self
命名为约定)。另一种看待它的方式:
foo.method()
基本上相当于:
MyClass.method(foo)