2017-12-15 8 views
-5

저는 새로운 Python 3.6을 배우면서 거의 첫 번째 코드 프로젝트를 완료했습니다. 내 문제를 해결하기 위해 철저한 검색을 한 후에 나는 확실한 것에 대한 답을 찾을 수 없었습니다.프로그램 시작 후 버튼이 작동하지 않는 문제

프로그램 전제 : 사용자가 URL을 입력하고 해당 시간대의 확인란을 클릭하여 URL을 호출합니다. 그런 다음 사용자는 시작 버튼을 클릭하고 선택한 체크 상자 (시간)에 따라 프로그램이 시간 경과 후 url을 열기 시작합니다. 이것은 정상적으로 작동합니다 ... 그러나 일단 프로그램이 시작되면 버튼이 더 이상 활성화되지 않고 작동하지 않으며 클릭 할 수 없습니다. GUI에 tkinter를 사용했습니다.

사용자를 위해 2 개의 버튼을 활성 상태로 유지하려고합니다. 끝내기 버튼 - 프로그램의 기능을 종료하고 나가기 버튼은 프로그램을 종료하고 완전히 닫습니다.

올바른 방향으로 포인트를 주시면 감사하겠습니다. 사용

현재 수면() 코드 :

def execute(): 
execute = urllib.request.urlopen(url.get())) 

def Time(): 
if CheckVar1.get() and url.get(): 
timeloop = True 
Sec = 0 
Min = 0 
timeLoop = A 
while timeLoop: 
    Sec += 1 
    execute() 
    time.sleep(300) 

나는이 따를 내 질문에 좀 더 쉽게 도움이되기를 바랍니다. 루프가 프로그램의 다른 부분 (버튼)을 활성화 할 수 있도록하기 위해 다른 작업을 수행해야 할 수도 있습니다. 따라서 사용자는 일단 실행 중일 때 프로그램을 종료하거나 종료 할 수 있습니다. 참고 : CheckVar1.get()은 해당 시간대의 확인란을 선택했는지 확인하기 위해 8 개의 다른 시간 설정이 사용되고 있는지 확인합니다.

+2

여기에 게시하지 않으면 사람들은 어떻게 알겠습니까? 코드에 어떤 문제가 있습니까? [질문을 편집하십시오.] (https://stackoverflow.com/help/mcve) – MrT

+0

백그라운드 스레드에서 다운로드를 원합니다. –

+0

나는 당신의 타임 루프가 tkinter 메인 루프가 그 일을하도록 내버려 두지 않는다고 생각한다. – progmatico

답변

0

코드가 들여 쓰기가 잘못되었거나 다른 문제가있을 수 있지만 기본적으로 잘못된 방식이므로 tkinter에서 UI를 차단하지 않고 fuction을 호출하는 방법에 대한 예가 있습니다. 이는 일종의 백그라운드 처리로 사용될 수 있으며 간단합니다.

import tkinter as tk 
from tkinter import Tk, ttk 


def some_action(): 
    # do what you want 
    # ... 
    print('Hi! Getting my urls here...') 
    # but don't block with sleeps or infinite loops, 
    # and then 
    next_check = get_your_check_interval() # somehow calculate or 
              # retrieve this from 
              # your vars or widgets, 
              # using seconds 
    # register for the next call of some_action 
    root.after(next_check*1000, some_action) 

def get_your_check_interval(): 
    return 3 # just using 3 seconds now... 

root = Tk() 

start_button = ttk.Button(root, text='Start', command=some_action) 
quit_button = ttk.Button(root, text='Quit', command=quit) 


start_button.pack(side=tk.LEFT) 
quit_button.pack() 
root.mainloop() 

버튼이 반응하는 것처럼 보이기 때문에 응용 프로그램을 종료 할 수 있습니다. 그래서 같은 기술로 문제를 해결할 수 있다고 생각합니다.

+0

도움을 주시면 감사하겠습니다. 오늘 저녁 집에 도착했을 때이 조각을 살펴 보겠습니다. 안내 및 도움을 다시 한번 감사드립니다. – DT2000