如何在Tkinter中获取单选按钮的输出?

3

这是我编写的代码,用于在GUI界面上显示单选按钮及其选项和其他小部件...但是它无法运行。我的意思是,当有单选按钮代码时,它不会显示在GUI界面上。

from Tkinter import *
import tkFont

class Application:
    def __init__(self, top):
        self.top=top
        # initializer for gui
        self.gui()

    def gui(self):
        var="Application"
        helv16=tkFont.Font(self.top,family="Helvetica",size=16,slant="italic")
        label1=Label(self.top,text=var,font=helv16,bd=5,fg='#2ddef9',bg='#aaecaa',relief=RIDGE,padx=17,pady=4,justify="center")
        label1.pack(side=TOP)

        label2=Label(self.top,text='Proxy City', bd=3,fg='red',bg='#FFFFFF',relief=GROOVE,padx=18,pady=4,justify="center")
        label2.grid(row=2, column=1)
        # setting default proxy city to Bangalore
        v=IntVar()
        # initiallize to Bangalore
        v.set(1)

        list_city=[("Bangalore", 1), ("Chennai", 2), ("USA", 3), ("Chaina", 4)]
        for city, num in list_city:
            #print city, num
            radiobttn=Radiobutton(self.top, text=city, padx=10,pady=5, variable=v, value=num,command=sel, bd=3,fg='red',bg='#FFFFFF',relief=GROOVE)
        radiobttn.pack(anchor='w')

        label3=Label(self.top,text='Add URL', bd=3,fg='red',bg='#FFFFFF',relief=GROOVE,padx=17,pady=4,justify="center")
        entry3=Entry(self.top,relief=SUNKEN,justify=CENTER,bd=3,fg='#0000FF',font='arial')

        label3.grid(row=3, column=0)
        entry3.grid(row=3, column=1)

        label3=Label(self.top,text='Add URL', bd=3,fg='red',bg='#FFFFFF',relief=GROOVE,padx=17,pady=4,justify="center")
        entry3=Entry(self.top,relief=SUNKEN,justify=CENTER,bd=3,fg='#0000FF',font='arial')
        label3.grid(row=4, column=0)
        entry3.grid(row=4, column=1)

    def sel():
        selection = "You selected the option " + str(v.get())
        label.config(text = selection)


def main():

    top=Tk()
    top.geometry("680x600+400+240")
    top.title("Application")
    Application(top)
    top.mainloop()

if __name__=='__main__':
    main()

你找到任何解决方案了吗? - K DawG
是的...我找到了解决方案,感谢您的帮助...还有一件事,我在这里和Python中都是新手...所以感谢您需要花费时间...谢谢..:) - uday bhanu
1个回答

1

有很多情况下你没有在类范围内使用变量,而只是在方法的范围内使用,但我已经修复了它们。

你修复后的代码应该是这样的:

from Tkinter import *
import tkFont

class Application:
    def __init__(self, top):
        self.top=top
        # initializer for gui
        self.gui()

    def gui(self):
        var="Application"
        helv16=tkFont.Font(self.top,family="Helvetica",size=16,slant="italic")
        self.label1=Label(self.top,text=var,font=helv16,bd=5,fg='#2ddef9',bg='#aaecaa',relief=RIDGE,padx=17,pady=4,justify="center")
        self.label1.pack(side=TOP)

        label2=Label(self.top,text='Proxy City', bd=3,fg='red',bg='#FFFFFF',relief=GROOVE,padx=18,pady=4,justify="center").pack()
        # setting default proxy city to Bangalore
        self.v=IntVar()
        # initiallize to Bangalore
        self.v.set(1)


        list_city=[("Bangalore", 1), ("Chennai", 2), ("USA", 3), ("Chaina", 4)]
        for city, num in list_city:
            #print city, num
            Radiobutton(self.top, text=city, padx=10,pady=5, variable=self.v, value=num,command=self.sel, bd=3,fg='red',bg='#FFFFFF',relief=GROOVE).pack(anchor='w')

        label3=Label(self.top,text='Add URL', bd=3,fg='red',bg='#FFFFFF',relief=GROOVE,padx=17,pady=4,justify="center").pack()
        entry3=Entry(self.top,relief=SUNKEN,justify=CENTER,bd=3,fg='#0000FF',font='arial').pack()

    def sel(self):
        selection = "You selected the option " + str(self.v.get())
        self.label1.config(text = selection)


def main():
    top=Tk()
    top.geometry("680x600+400+240")
    top.title("Application")
    Application(top)
    top.mainloop()

if __name__=='__main__':
    main()

注意:我从来没有理解过你代码中覆盖现有标签的部分!这是不好的实践,不应该被采用。

label3=Label(self.top,text='Add URL', bd=3,fg='red',bg='#FFFFFF',relief=GROOVE,padx=17,pady=4,justify="center")
entry3=Entry(self.top,relief=SUNKEN,justify=CENTER,bd=3,fg='#0000FF',font='arial')

label3.grid(row=3, column=0)
entry3.grid(row=3, column=1)

label3=Label(self.top,text='Add URL', bd=3,fg='red',bg='#FFFFFF',relief=GROOVE,padx=17,pady=4,justify="center")
entry3=Entry(self.top,relief=SUNKEN,justify=CENTER,bd=3,fg='#0000FF',font='arial')
label3.grid(row=4, column=0)
entry3.grid(row=4, column=1)

正如@BryanOakley所提到的,你可以在同一个主循环中使用packgrid方法,但是你不能同时用于共享同一父级的小部件。


“你不能在一个主循环中同时使用pack和grid方法”这个说法是错误的。你完全可以并且应该同时使用它们。唯一不允许的是对于共享同一父级的小部件同时使用它们。 - Bryan Oakley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接