7

PyDev (Eclipse) python 2.75 でグラフィック ウィンドウを作成したいと思います。

やったことは少ないのですが、「入り口」「まばたき」を作りたいと思っています。ユーザー入力をテストします。整数の場合は、緑色で 1 秒間点滅した後、白色に変わります。しかし、それが他の何かの文字列である場合は、赤く点滅してから白に変わるはずです. を使用しましたtime.sleep()が、思い通りに動作しません。

このアクションのコードは次のとおりです。

def sprawdzam():

    z = e.get()
    try:
        z = int(z)
        e.config(bg = 'green')
        time.sleep(2)
        e.config(bg = 'white')    

    except:
        l.config(bg = 'red')
        time.sleep(2)
        e.config(bg = 'white')
4

3 に答える 3

11

time.sleepプログラムの実行をブロックします。

を使用しafterます。

例えば:

from Tkinter import *

def blink():
    e.config(bg='green')
    e.after(1000, lambda: e.config(bg='white')) # after 1000ms

root = Tk()
e = Entry(root)
e.pack()
b = Button(root, text='blink', command=blink)
b.pack()
root.mainloop()
于 2013-11-10T08:38:01.280 に答える
0

まず第一に、コードの管理に try/except ブロックを使用しないでください。第二に、色を切り替えるためにe.configとを使用していますが、どちらを使用する必要がありますか? l.config(混乱を減らすために、変数とオブジェクトのより良い命名規則を検討する必要があります)。

ユーザーが入力したオブジェクトのタイプを確認してから、次のように管理されたフローを改善できます。

def sprawdzam():
    content = e.get()
    if content.isalnum():
        e.config(bg = 'green')    
    else:
        e.config(bg = 'red')
    time.sleep(2)
    e.config(bg = 'white')

ここではe、色を変更するオブジェクトとして使用しましたが、これはコードには当てはまらない可能性があります。正しいオブジェクトで行っていることを確認する必要があります。

ご覧のとおり、スリープと白への切り替えは if/else の外側で行われます。何があっても待機してから白に変わるため、そのコードを 2 回記述する必要はありません。

于 2013-11-10T08:41:22.910 に答える