мое окно tkinter появляется после того, как я закончил программу

Я делаю метеостанцию ​​с помощью raspberry pi и пытаюсь использовать окно tkinter для отображения данных, однако окно появляется только после того, как я использовал ctrl + c для завершения программы. Я использую терминал для запуска кода (команда sudo python test.py)

Кто-нибудь знает, что я делаю неправильно?

from WeatherPiHumiture import *
from WeatherPiBarometer import *
import Tkinter as tkinter

window = tkinter.Tk()

def main():
    while True:
                result = read_dht11_dat()
                if result:
                        humidity, temperature = result
                        humid = "Humidity: %s %% " % (humidity)
                        humids = tkinter.Label(
                            text=humid,
                            fg='black',
                            bg='white',
                            height=2,
                            width=40
                        )

                #Barometer
                sensor = BMP085.BMP085()
                temp = sensor.read_temperature()    # Read temperature to veriable temp
                pressure = sensor.read_pressure()
                
                temperatures = 'Temperature: {0:0.2f} C'.format(temp)# Print temperature
                temperate = tkinter.Label(
                        text=temperatures,
                        fg='black',
                        bg='white',
                        height=2,
                        width=40
                )
            
                pressure = '{0:0.2f}'.format(pressure)
                pressure = float(pressure)
                millibar = pressure / 100
                millibar = str(millibar)
                pressured = 'Pressure: ' + millibar + ' MilliBar'
                pressures = tkinter.Label(
                        text=pressured,
                        fg='black',
                        bg='white',
                        height=2,
                        width=40
                )

                temperate.grid(row=0, column=0)
                pressures.grid(row=0, column=1)
                humids.grid(row=0, column=2)
                
                time.sleep(1)

def destroy():
    GPIO.cleanup()

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        destroy()


window.mainloop()

person Hugo Phelan    schedule 25.06.2020    source источник
comment
почему вы определяете главное? это не с++ xD   -  person Evorage    schedule 25.06.2020
comment
@Evorage: создание функции main довольно распространено даже в python.   -  person Bryan Oakley    schedule 25.06.2020
comment
Попробуйте передать родительское окно метке в качестве родителя. Например, tkinter.Label(окно, затем другие аргументы)   -  person tan_an    schedule 25.06.2020
comment
@tan_an это то, что ты имел в виду humids = tkinter.Label( master=window.mainloop(), text=humid, fg='black', bg='white', height=2, width=40 )   -  person Hugo Phelan    schedule 25.06.2020
comment
Это должно быть humids=tkinter.Label(window, text=humid, fg='black', bg='white'). Это добавит метку внутри окна, которое вы создали в начале.   -  person tan_an    schedule 25.06.2020


Ответы (1)


Добавьте window.mainloop() в свой блок try

if __name__ == '__main__':
    try:
        main()
        window.mainloop()
    except KeyboardInterrupt:
        destroy()
        window.destroy()
person Tresdon    schedule 25.06.2020