1

我目前正在开发一个将华氏温度转换为摄氏度并以不同方式显示的 GUI。如果摄氏度最终为正 (+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()
4

1 回答 1

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

请注意, 的 ID 与foo的 ID 相同self。换句话说,foo作为第一个参数传递给它的方法(我们将其命名self为约定)。另一种看待它的方式:

foo.method()

基本上相当于:

MyClass.method(foo)    
于 2013-01-02T14:10:48.623 回答