2017-12-15 2 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

コードのインデントが間違っているかもしれませんが、あなたのアプローチが本質的に間違っているため、UIをブロックせずにtkinterでしばらくしてから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

関連する問題