Таймер в Гизеро / TKinter - PullRequest
0 голосов
/ 24 мая 2018

Сейчас я занят созданием графического интерфейса для моего проекта.Это также нуждается в проверке, основанной на времени.Однако, когда я нажимаю кнопку запуска, счетчик начинает отсчет, но графический интерфейс останавливается, поэтому вы не можете нажать кнопку остановки.И в конце концов Программа остановилась и закрылась.

Посмотрите на мой код:

###import libaries ###
from guizero import *
import tkinter as tk
import time

timeLoop = False
###Variabelen###

Sec = 0
Min = 0
Hour = 0
test_stat = 0


###Define Loops###
def verlaat_settings():
   window2.hide()
   window3.hide()
   window4.hide()
   window.show(wait=True)

def stop_test():
   info("test_result","Test stopped at" + str(Hour) + " Hour " + str(Min) + " Mins " + str(Sec) + " Sec ")
   text_test.value = "Test Stopped..."
   timeLoop: False



def test_loopt():
   global Sec
   global Min
   text_test.value = "Test is running....."
   timeLoop = True
   while timeLoop:
      Sec +=1
      print(str(Min) + " Mins " + str(Sec) + " Sec ")
      time.sleep(1)
      if Sec == 60:
         Sec = 0
         Min += 1
app= App(title="Profiberry",layout="",width=480, height=272)
window3 = Window(app,title="Profiberry-Tester", layout="grid",width=480, height=272)
window3.show

###Window3###
welkom_tester= Text(window3, text="Profibus Tester",grid=[2,0,1,1])
Plaatje_profi= Picture(window3,image="logoprofi.gif",grid=[2,1,1,1])
lege_ruimte1 = Text(window3, text="", grid=[2,2,1,1])
text_test= Text(window3,text="  Waiting for input..... ",grid=[2,3,1,1])
timer_test= Text(window3,text=(""),grid=[2,4,1,1] )
lege_ruimte2 = Text(window3, text="", grid=[2,5,1,1])
lege_ruimte2 = Text(window3, text="", grid=[1,6])
Start_knop= PushButton(window3,text="Start",command=test_loopt,padx=50, pady=10, grid=[1,6] )
Start_knop.tk.config(foreground="white",background="green")
Stop_knop= PushButton(window3,text="Stop",command=stop_test,padx=50,pady=10,grid=[3,6])
Stop_knop.tk.config(foreground="white",background="red")
Exit_setting = PushButton(window3,command=verlaat_settings,text="Exit to Main Menu(F2)",padx=30,pady=10,grid=[2,6])

Я расскажу вам об этой части моей программы:

  • Импортируйте библиотеки, используемые для этой цели.
  • Дайте timeLoop, нашей переменной while, ложное состояние.
  • Дайте значение нашей переменной.
  • Ниже приведены наши циклы Def *. 1015 * используется для перемещения окон желоба в графическом интерфейсе. Stop_test используется для выполнения действий при нажатии кнопки Stop (также для сброса состояния while). test_loopt - фактическое значение.тест, счетчик должен запустить здесь то, что он делает в оболочке.
  • Ниже мы открываем окно и размещаем виджеты.

1 Ответ

0 голосов
/ 25 мая 2018

так что после поиска я нашел здесь страницу с кем-то на python 2.7, у которого точно такая же проблема.

решение этого состоит в том, что все выполняется в основном цикле, и главный цикл всегда ожидает на этом test_loopt решение создавало поток, который в моем случае был:

def test_loopt():
   global Sec
   global Min
   text_test.value = "Test is running....."
   timeLoop = True
   while timeLoop:
      Sec +=1
      print(str(Min) + " Mins " + str(Sec) + " Sec ")
      time.sleep(1)
      if Sec == 60:
         Sec = 0
         Min += 1
      if Min == 60:
         Sec = 0
         Min = 0
         Hour = 1
   if stop_test():
      timeLoop = False

def start_test_loopt_thread():
   global test_loopt_thread
   test_loopt_thread = threading.Thread(target=test_loopt)
   test_loopt_thread.deamon = True
   test_loopt_thread.start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...