2017-02-05 152 views
0

我似乎無法重新評估複選框的狀態。在一個簡單的explination,我可以做以下如何重新評估tkinter中checkbutton的狀態

import tkinter 
from tkinter imprt ttk 
root = Tk() 
ck = ttk.Checkbutton(root, text='Checkbox') 
ck.state(['!alternate']) 
ck.state(['selected']) 

if ck.instate(['selected']): 
    # do something 
elif ck.instate(['!selected']): 
    # do something else 

root.mainloop() 

這臺checkbutton到「選擇」的狀態,然後因爲它選擇運行if聲明。但是,如果我要取消選中該複選框,則不會重新評估複選框的狀態並運行elif聲明。我看過像root.update()root.update_idletasks這樣的東西,但我相當肯定這不是我要找的東西。

感謝您的幫助!

作爲一個方面說明,我對Python的3.x的

+0

將執行這個'如果/ else'只執行一次 - 在啓動。如果你在運行程序時必須執行某些操作,那麼給'Checkbutton'分配/綁定函數。 – furas

回答

0

if/else只執行一次 - 在啓動。如果你正在運行的程序然後分配功能Checkbutton

ttk.Checkbutton(..., command=function_name) 

期間執行的東西,當你點擊checkbutton

import tkinter as tk 
from tkinter import ttk 

# --- functions --- 

def clicked(): 
    if ck.instate(['selected']): 
     print('selected') 
    elif ck.instate(['!selected']): 
     print('not selected') 

# --- main --- 

root = tk.Tk() 

ck = ttk.Checkbutton(root, text='Checkbox', command=clicked) 
ck.pack() 

root.mainloop() 
+0

這樣做很有道理,不敢相信我沒有想到這一點。謝謝! – Goalieman

+0

順便說一句:可能只有'Button'和'Checkbutton'具有'command =' - 其他小部件需要'widget.bind(event_type,function_name)' - 即。 'root.bind('',on_keypress)' – furas