Wie mache ich den Check des Menu Radiobuttons sichtbar?

Fragen zu Tkinter.
Antworten
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Der Menü Radiobutton 'alphabetical' soll am Anfang zeigen, dass er gechecked ist. Es hatte einmal funktioniert, aber keine Ahnung wie.

Wie mache ich das?

Code: Alles auswählen

# -*- coding: utf-8 -*-

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk


class Application(tk.Tk):

    def __init__(self,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        # widget definitions ===================================
        self.menu = Menu_1(self)
        self['menu'] = self.menu

class Menu_1(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        # widget definitions ===================================
        self.Menu = Menu_2(self,tearoff=0, fg='black', bg='white', relief='solid', disabledforeground='black', activebackground='#7bfeff', activeforeground='black')
        self.add_cascade(menu=self.Menu,underline=0, label='Special')
        # indexes for entryconfig later
        self.Special_index = 1

class Menu_2(tk.Menu):

    def __init__(self,master,**kwargs):

        tk.Menu.__init__(self,master,**kwargs)
        self.config(tearoff=0, fg='black', bg='white', relief='solid', disabledforeground='black', activebackground='#7bfeff', activeforeground='black')
        # widget definitions ===================================
        self.add_command(state='disabled', label='Navigation Order', activebackground='white')
        self.add_radiobutton(value='alphabetical', label='alphabetical', underline=0)
        self.add_radiobutton(value='basement', label='z-order', underline=0)
        # indexes for entryconfig later
        self.order_index = 0
        self.alphabetical_index = 1
        self.z_order_index = 2

        # === Wie mache ich den Check des Menu Radiobuttons sichtbar?
        variable = tk.StringVar()
        self.entryconfig(self.alphabetical_index,variable = variable)
        self.entryconfig(self.z_order_index,variable = variable)
        variable.set('alphabetical')

if __name__ == '__main__':
    Application().mainloop()
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Habe herausgefunden, woran es liegt. Das ist genauso wie beim PhotoImage.
Die Referrnz im radiobutton variable genügt nicht, um die Varible zu binden. Sie muss schon durch ein self.variable verankert sein.

Code: Alles auswählen

# -*- coding: utf-8 -*-

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk


class Application(tk.Tk):

    def __init__(self,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        # widget definitions ===================================
        self.menu = Menu_1(self)
        self['menu'] = self.menu

class Menu_1(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        # widget definitions ===================================
        self.Menu = Menu_2(self,tearoff=0, fg='black', bg='white', relief='solid', disabledforeground='black', activebackground='#7bfeff', activeforeground='black')
        self.add_cascade(menu=self.Menu,underline=0, label='Special')
        # indexes for entryconfig later
        self.Special_index = 1

class Menu_2(tk.Menu):

    def __init__(self,master,**kwargs):

        tk.Menu.__init__(self,master,**kwargs)
        self.config(tearoff=0, fg='black', bg='white', relief='solid', disabledforeground='black', activebackground='#7bfeff', activeforeground='black')
        # widget definitions ===================================
        self.add_command(state='disabled', label='Navigation Order', activebackground='white')
        self.add_radiobutton(value='alphabetical', label='alphabetical', underline=0)
        self.add_radiobutton(value='basement', label='z-order', underline=0)
        # indexes for entryconfig later
        self.order_index = 0
        self.alphabetical_index = 1
        self.z_order_index = 2


        # === Wie mache ich den Check des Menu Radiobuttons sichtbar? Problem gelöst.
        self.variable = tk.StringVar()
        self.entryconfig(self.alphabetical_index,variable = self.variable)
        self.entryconfig(self.z_order_index,variable = self.variable)
        self.variable.set('alphabetical')

if __name__ == '__main__':
    Application().mainloop()
Antworten