2017-02-05 15 views
0

Я не могу переоценить состояние флажка. В простом explination, я могу сделать следующееКак переоценить состояние контрольной кнопки в tkinter

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

BTW: возможно, только 'Button' и' Checkbutton' имеют 'command =' - для других виджетов требуется 'widget.bind (event_type, function_name)' - ie. 'root.bind ('', on_keypress)' – furas