Запутанность между контрольными кнопками Tkinter - PullRequest
0 голосов
/ 26 мая 2020

Привет, я делаю программу, в которой есть кнопка-флажок в главном окне и окно верхнего уровня, в котором она также есть. проблема в том, что по какой-то причине контрольная кнопка верхнего уровня влияет на состояние основной контрольной кнопки, или основная контрольная кнопка имитирует верхний уровень (если вы отметите / снимите отметку с верхнего уровня, основной также проверяет / снимает отметки). Вот пример кода, который отображает проблему:

import tkinter as tk

def toplevel():
    top = tk.Toplevel()
    top.geometry('200x50')

    top_chekbutton = tk.Checkbutton(top, text='top')

    top_chekbutton.pack()

    top.mainloop()

main = tk.Tk()
main.geometry('200x50')

open_top = tk.Button(main, text='open top', command=toplevel)

main_checkbutton = tk.Checkbutton(main, text='main')

main_checkbutton.pack()
open_top.pack()

main.mainloop()

Я не определил переменные состояния, потому что они не кажутся источником проблемы. Я использую python 3.7.7 и tkinter 8.6 на win10. пожалуйста, помогите: (

1 Ответ

0 голосов
/ 26 мая 2020

Как правило, каждый экземпляр Checkbutton должен иметь связанную с ним переменную. Если вы этого не сделаете, будет использоваться значение по умолчанию, одинаковое для всех Checkbuttons. Все виджеты с одной и той же переменной будут отображать одно и то же значение.

Вы можете убедиться в этом сами, распечатав значения top_chekbutton.cget("variable") и main_checkbutton.cget("variable"). В обоих случаях значение равно "! Checkbutton" (по крайней мере, с версией python, которую я использую).

Итак, назначьте переменную для ваших контрольных кнопок, например BooleanVar, IntVar или StringVar.

main_var = tk.BooleanVar(value=False)
main_checkbutton = tk.Checkbutton(main, text='main')
...