函数中的比率按钮默认值

2024-10-02 12:35:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想添加一个在gui上有默认值的单选按钮(在“数字”和“模拟”之间切换)。以下代码显示,默认值=“数字”显示在按钮上

import tkinter as tk

root = tk.Tk()
tk.Label(root, text = 'MPD').grid(row = 1, column = 15)
MPDmode = tk.Frame(root)
MPDmode.grid(row = 2, column = 15)
MPDmode_var = tk.StringVar(value = 'digital')
MPDdigital = tk.Radiobutton(MPDmode, text = 'Digital', variable = MPDmode_var, indicatoron = False, value = 'digital', width = 8)
MPDanalog = tk.Radiobutton(MPDmode, text = 'Analog', variable = MPDmode_var, indicatoron = False, value = 'analog', width = 8)
MPDdigital.grid(row = 0)
MPDanalog.grid(row = 1)

root.mainloop()

但是,如果在函数中定义内容,则无法显示默认值。即:

import tkinter as tk

def start():
    tk.Label(root, text = 'MPD').grid(row = 1, column = 15)
    MPDmode = tk.Frame(root)
    MPDmode.grid(row = 2, column = 15)
    MPDmode_var = tk.StringVar(value = 'digital')
    MPDdigital = tk.Radiobutton(MPDmode, text = 'Digital', variable = MPDmode_var, indicatoron = False, value = 'digital', width = 8)
    MPDanalog = tk.Radiobutton(MPDmode, text = 'Analog', variable = MPDmode_var, indicatoron = False, value = 'analog', width = 8)
    MPDdigital.grid(row = 0)
    MPDanalog.grid(row = 1)

root = tk.Tk()
start()
root.mainloop()

因为我想让我的项目开发更加结构化,所以我想把内容放在一个函数中,并在代码中的不同位置调用它来构建GUI。我可以知道我怎样才能做到这一点吗


Tags: textfalsevaluevarcolumnrootvariabletk
1条回答
网友
1楼 · 发布于 2024-10-02 12:35:20

看起来StringVar在函数中创建时得到了GCed。可以将StringVar创建为全局变量:

def start():
    global MPDmode_var
    ...
    MPDmode_var = tk.StringVar(value = 'digital')

但如果您正在寻找更好的结构,则可以使用类:

import tkinter as tk

class Start(tk.Frame):
    def __init__(self,master=None,**kwargs):
        super().__init__(master,**kwargs)
        tk.Label(master, text = 'MPD').grid(row = 1, column = 15)
        self.grid(row = 2, column = 15)
        self.MPDmode_var = tk.StringVar(value='digital')
        MPDdigital = tk.Radiobutton(self, text = 'Digital', variable = self.MPDmode_var,
                                    indicatoron = False, value = 'digital', width = 8)
        MPDanalog = tk.Radiobutton(self, text = 'Analog', variable = self.MPDmode_var,
                                   indicatoron = False, value = 'analog', width = 8)
        MPDdigital.grid(row = 0)
        MPDanalog.grid(row = 1)

root = tk.Tk()
Start(root)
root.mainloop()

相关问题 更多 >

    热门问题