【问题标题】:radiobutton not setting value单选按钮未设置值
【发布时间】:2015-03-22 20:10:08
【问题描述】:

我正在制作一个文本编辑程序,但是当我运行这段代码时 它不起作用,因为在第 13 行,selecfont.get() 没有返回任何值。 我不知道这是否与 for 循环有关,但我无法修复它 我在另一个程序上遇到了类似的问题。 谢谢

from tkinter import *
from os import listdir
from os import path
from threading import Thread

def open():
    print("open selected")

def save():
    print("save selected")

def fontchange():
    sheet.config(font = (str(selecfont.get())))
    print(selecfont.get())

fonts = ["Arial","Courier New","Times New Roman","Verdana",
"System","Impact","Fixedsys","corbel"]
master = Tk()
master.config(bg =  "#080d31")
master.title("Ed.co")

menubar = Menu(master,background = "#080d31")

filemenu = Menu(menubar,tearoff=0)
filemenu.add_command(label = "open",command = open)
filemenu.add_command(label = "save",command = save)
menubar.add_cascade(label = "file",menu = filemenu)

settingsmenu = Menu(menubar,tearoff=0)
fontmenu = Menu(settingsmenu,tearoff=0)
settingsmenu.add_cascade(label = "font",menu = fontmenu)
menubar.add_cascade(label = "settings",menu = settingsmenu)
for font in fonts:
        selecfont = StringVar()
        fontmenu.add_radiobutton(value = font,label = font,variable =       selecfont,command = fontchange)

sheet = Text(master,width = 71,height = 15,font = "corbel")
sheet.grid(row=1,column=0,columnspan = 3)

master.config(menu = menubar)
master.mainloop()

错误信息:

sheet.config(font = (str(selecfont.get())))
  File "C:\Python34\lib\tkinter\__init__.py", line 1319, in configure
    return self._configure('configure', cnf, kw)
  File "C:\Python34\lib\tkinter\__init__.py", line 1310, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: font "" doesn't exist

【问题讨论】:

    标签: python-3.x tkinter radio-button


    【解决方案1】:

    单选按钮需要共享一个公共变量,但您要为每个单选按钮创建一个新变量。您需要将selecFont 的定义移出循环:

    selecFont = StringVar()
    for font in fonts:
        ...
    

    【讨论】:

    • @user4475889: 还有什么程序? “不起作用”是什么意思?
    • 只是我正在编写的另一个程序。radiobuttons
    • 在这个其他程序中,在 for 循环中创建的单选按钮不会给变量赋值。此外,当我运行程序时,所有单选按钮都显示为选中状态。
    • folders = [d for d in listdir("C:/Users/Ed/Documents") if path.isdir(path.join("C:/Users/Ed/Documents", d) )] selfolder = StringVar() 用于文件夹中的文件夹: folderselect = Radiobutton(loadmaster,text = folder,variable = selfolder,value = folder,command = loadfile) folderselect.pack()
    • @user4475889:抱歉,我无法在我看不到的程序上为您提供帮助。但是,单选按钮必须有一个值,否则单选按钮毫无意义。它们被设计为作为一个集合工作,每个都有不同的值,并且都共享相同的公共变量。
    猜你喜欢
    • 2022-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2020-08-10
    • 2014-12-30
    • 2019-07-28
    • 1970-01-01
    • 2021-03-07
    相关资源
    最近更新 更多