Проверка состояния кнопки CheckButton на верхнем уровне

#python #html #tkinter

#python #HTML #tkinter

Вопрос:

Я тестирую виджет Checkbutton на верхнем уровне. Я был вдохновлен этим в основном фрейме введите описание ссылки здесь

мой тест на верхнем уровне инициализирует виджет Checkbutton с квадратом, полностью заполненным синим цветом, когда он должен быть пустым.

цель состоит в том, чтобы зафиксировать состояние виджета в соответствии с выбором пользователя. Я не хочу использовать класс

здесь код Seput.py

 # coding:utf-8
#version 3.x python

# ==================================================
#                                         ID python
# ==================================================
from tkinter import *
import tkinter as tk
from tkinter import ttk

import Maintenances

# ==================================================
#                                  Fenêtre Principal - Configuration
# ==================================================
root = tk.Tk()                                                                                                    # Crée une instance Tk class
root.title("Principal")
root.resizable(False, False)                                                                                 # Fenêtre verrouillée

window_height = 150
window_width = 150

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

x_cordinate = int((screen_width/2) - (window_width/2))
y_cordinate = int((screen_height/2) - (window_height/2))

root.geometry("{}x{} {} {}".format(window_width, window_height, x_cordinate, y_cordinate))

def New_Maintenances():
    Maintenances.Maintenances_Contenu()

# ==================================================
#                                  Frames
# ==================================================

# --- Frame vertival droite ---
LeftFrame = tk.LabelFrame(root, text="[   ]", font=('verdana', 8, ''), foreground="blue", relief=SOLID, borderwidth=0)
LeftFrame.place(x=5, y=5, width=123, height=200)

# Buttons
Bt4 = tk.Button(LeftFrame, width=16, text="checkbutton", font=('verdana', 8, ''), command=New_Maintenances)
Bt4.grid(row=4, column=0)

root.mainloop()
 

здесь код Maintenance.py

 # coding:utf-8
# version 3.x python

from tkinter import *
import tkinter as tk
from tkinter.ttk import *
from tkinter.ttk import Button
from tkinter import Toplevel

def Maintenances_Contenu():

    Maintenance_Frame = tk.Toplevel()
    Maintenance_Frame.title('Toplevel')
    Maintenance_Frame.geometry("200x200 30 30")                                                                    # ("X Y  30 30")  561x305
    Maintenance_Frame.resizable(width=False, height=False)                                                         # Fenêtre verrouillée
    Maintenance_Frame.attributes("-toolwindow", 1)                                                                       # Supprime les boutons Réduire/Agrandir
    Maintenance_Frame.attributes("-topmost", 1)                                                                           # au priemier plan

    # ==============================================================
    #                                                            Cadres
    # ==============================================================


    FrameForm = Frame(Maintenance_Frame,  width=910)  #, relief=SOLID, borderwidth=1)
    FrameForm.grid(row=1, column=0)

    FrameRight = LabelFrame(FrameForm, text="[----]", width=550, height=304, relief=SOLID, borderwidth=1)
    FrameRight.grid(row=0, column=1, sticky=W)

    chkValue = tk.BooleanVar()
    chkValue.set(False)

    print("The checkbutton original value is {}".format(chkValue.get()))
    print("Etat d'origine --> Désactivé :", chkValue.get())
    print("n")

    chkExample = Checkbutton(FrameRight, text='texte', var=chkValue)
    chkExample.place(x=2, y=102)



 

Ответ №1:

Это потому chkValue , что собирается мусор. Сохраните ссылку на него, как показано ниже:

 def Maintenances_Contenu():
    ...
    chkExample = tk.Checkbutton(FrameRight, text='texte', var=chkValue)
    chkExample.place(x=2, y=102)
    chkExample.var = chkValue  # save a reference