单击按钮后交换标签

时间:2013-01-02 13:56:36

标签: python python-3.x tkinter

我目前正在开发一个将华氏转换为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()

1 个答案:

答案 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()

请注意,要访问该方法,您需要知道foobar = 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)