Seite 1 von 1

Wie mache ich den Check des Menu Radiobuttons sichtbar?

Verfasst: Mittwoch 21. Juni 2017, 13:21
von Alfons Mittelmeyer
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()

Re: Wie mache ich den Check des Menu Radiobuttons sichtbar?

Verfasst: Mittwoch 21. Juni 2017, 13:42
von Alfons Mittelmeyer
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()