【问题标题】:TKinter RadioButton not workingTKinter 单选按钮不起作用
【发布时间】:2014-05-06 08:46:42
【问题描述】:

我一直在尝试让我的单选按钮工作,并且我查看了其他问题,但不知道如何修复我的代码。它打印一个空格。

Entry4=StringVar()

def CreateNewJob():
  global Entry4
  window=Tk()
  window.title('Creating new job')
  Male= Radiobutton(window, text ='Male' , variable= Entry4 , value='Male')
  Female= Radiobutton(window, text ='Female', variable= Entry4 , value='Female')
  Mixed= Radiobutton(window, text ='Mixed',variable= Entry4 , value='Mixed')
  Male.select()
  Male.grid(row=4, column=1)
  Female.grid(row=4, column=2)
  Mixed.grid(row=4, column=3)    

  def SubmitNewJob():
    print('Selection: ' + Entry4.get())

  SubmitButton=Button (window,text= 'Submit', command=SubmitNewJob)
  SubmitButton.grid(row=15, column=1)

我已经尝试了你们所提供的所有答案,但我仍然打印了一个空白区域。在这里,我复制了所有代码,因为问题可能出在其余代码中。

from tkinter import *
window=Tk()
window.geometry("400x400")

#creating the frame and buttons on menu
f=Frame()
button2= Button(f, text= 'Create new job')
button3= Button (f,text = 'Close')

#layout of buttons on menu
button2.grid(row=1, column=0, padx=10, pady=10)
button3.grid(row=2, column=0, padx=10, pady=10)

label = Label( window , text = 'Please choose an option' )
label.pack()
f.pack()
Entry1=None
Entry2=None
Entry3=None
Entry5=None
Entry6=None
Entry7=None
Entry8=None
Entry9=None
Entry10=None
Entry11=None
Entry12=None
Entry13=None
Entry14=None

#allows user to create new job
def CreateNewJob():     
    window1=Tk()
    window1.title('Creating new job')

    global Entry2
    global Entry3
    global Entry4
    global Entry5
    global Entry6
    global Entry7
    global Entry8
    global Entry9
    global Entry10
    global Entry11
    global Entry12
    global Entry13
    global Entry14
    Entry4=StringVar()            

    def SubmitNewJob():
        print('Selection: ' + Entry4.get())


    Label(window1, text = 'Please enter information').grid(row=1)
    Label(window1, text = 'Input2').grid(row=2)
    Label(window1, text = 'Input3').grid(row=3)
    Label(window1, text = 'Input4').grid(row=4)
    Label(window1, text = 'Input5').grid(row=5)
    Label(window1, text = 'Input6').grid(row=6)
    Label(window1, text = 'Input7').grid(row=7)
    Label(window1, text = 'Input8').grid(row=8)
    Label(window1, text = 'Input9').grid(row=9)
    Label(window1, text = 'Input10').grid(row=10)
    Label(window1, text = 'Input11').grid(row=11)
    Label(window1, text = 'Input12').grid(row=12)
    Label(window1, text = 'Input13').grid(row=13)
    Label(window1, text = 'Input14').grid(row=14)

    Male= Radiobutton(window1, text ='Male' , variable= Entry4 , value='Male')
    Female= Radiobutton(window1, text ='Female', variable= Entry4 , value='Female')
    Mixed= Radiobutton(window1, text ='Mixed',variable= Entry4 , value='Mixed')

    Male.select()
    Male.grid(row=4, column=1)
    Female.grid(row=4, column=2)
    Mixed.grid(row=4, column=3)

    Entry2=Entry(window1)
    Entry2.grid(row=2, column=1)
    Entry3=Entry(window1)
    Entry3.grid(row=3, column=1)
    Entry5=Entry(window1)
    Entry5.grid(row=5, column=1)
    Entry6=Entry(window1)
    Entry6.grid(row=6, column=1)
    Entry7=Entry(window1)
    Entry7.grid(row=7, column=1)
    Entry8=Entry(window1)
    Entry8.grid(row=8, column=1)
    Entry9=Entry(window1)
    Entry9.grid(row=9, column=1)
    Entry10=Entry(window1)
    Entry10.grid(row=10, column=1)
    Entry11=Entry(window1)
    Entry11.grid(row=11, column=1)
    Entry12=Entry(window1)
    Entry12.grid(row=12, column=1)
    Entry13=Entry(window1)
    Entry13.grid(row=13, column=1)
    Entry14=Entry(window1)
    Entry14.grid(row=14, column=1)


    #closes submit new job menu
    def CloseNewJob():
        window1.destroy()

    #button to submit new job
    SubmitButton=Button (window1,text= 'Submit', command=SubmitNewJob)
    SubmitButton.grid(row=15, column=1)
    CloseButton=Button (window1,text= 'Close', command=CloseNewJob)
    CloseButton.grid(row=15, column=2)

#closes main menu
def Close():
    global window
    window.destroy()           
...

button2.configure(command=CreateNewJob)
button3.configure(command=Close)

window.mainloop()               

【问题讨论】:

  • This 小例子应该帮助你
  • 我查看了这个网站并遵循了相同的模式,但仍然无法正常工作。
  • 请用您尝试过的内容更新代码...
  • 我已经为你更新了。

标签: python tkinter radio-button


【解决方案1】:

我在这里和那里做了一些改变。第一件事(你已经做过)是使用StringVar()。 之后你可能会得到:

Exception AttributeError: "StringVar instance has no attribute '_tk'"....

您需要做的是在调用StringVar() 之前先调用Tk()。一切都很好。

from Tkinter import Radiobutton,Button,Tk,StringVar
window=Tk()
window.title('Creating new job')
Entry4=StringVar()

def CreateNewJob():
    global Entry4
    def SubmitNewJob():
        print('Selection: ' + Entry4.get())
    Male= Radiobutton(window, text ='Male' , variable= Entry4 , value='Male')
    Female= Radiobutton(window, text ='Female', variable= Entry4 , value='Female')
    Mixed= Radiobutton(window, text ='Mixed',variable= Entry4 , value='Mixed')
    SubmitButton=Button (window,text= 'Submit', command=SubmitNewJob)
    SubmitButton.grid(row=15, column=1)
    Male.select()
    Male.grid(row=4, column=1)
    Female.grid(row=4, column=2)
    Mixed.grid(row=4, column=3)    
    window.mainloop()

CreateNewJob()

编辑:

在你的新改变之后:当你想创建一个子窗口时,你应该使用Toplevel。所以,在你的代码中,只需这样做:

window1=Toplevel() 而不是Tk()

【讨论】:

  • 如果您描述了您所做的事情,您的答案会更好。否则,我们必须逐行阅读,试图找出你改变了什么,什么是相同的。
  • 好的..thnkx..如果您认为我错过了什么,请编辑答案;)
  • 我已经添加了我所有的代码,因为我仍然找不到问题
  • 我在回答中提供的代码,您遇到了什么错误?因为它在我的系统中运行得非常好
【解决方案2】:

单选按钮使用 IntVars

def SubmitNewJob():
    print('Selection: %d' % (Entry4.get()))

window=Tk()
window.title('Creating new job')
Entry4=IntVar()
Male= Radiobutton(window, text ='Male' , variable= Entry4 , value=1)
Female= Radiobutton(window, text ='Female', variable= Entry4 , value=2)
Mixed= Radiobutton(window, text ='Mixed',variable= Entry4 , value=3)
Male.select()
Male.grid(row=4, column=1)
Female.grid(row=4, column=2)
Mixed.grid(row=4, column=3)....
SubmitButton=Button (window,text= 'Submit', command=SubmitNewJob)
SubmitButton.grid(row=15, column=1)

window.mainloop()

【讨论】:

  • 不一定。您可以使用IntVar()StringVar() 甚至BooleanVar()Radiobutton
  • 我已经添加了我所有的代码,因为我仍然找不到问题
【解决方案3】:

您不能将普通变量与 Tkinter 小部件一起使用。您必须使用 Tkinter 变量之一,例如 StringVarIntVarBooleanVarDoubleVar。请参阅http://effbot.org/tkinterbook/variable.htm 了解更多信息。

注意:创建变量之前需要先创建根窗口。

更新:

几天后,您发布了新代码。在这段代码中,您创建了多个Tk 实例。这将导致您的代码失败。发生的情况是 StringVar 与第一个实例相关联,但单选按钮与第二个实例相关联,因此它获得了一个单独的 StringVar。

如果您需要创建多个窗口,请创建Toplevel 的实例。

【讨论】:

  • 我已经分配了 Entry4=StringVar() 但它仍然打印了一个空格。
  • @user3433940:你必须先创建根窗口。
  • 我已经添加了我所有的代码,因为我仍然找不到问题
  • @user3433940:现在的问题是您两次创建了Tk 的实例。您只能创建一次。创建新窗口时,您需要创建 Toplevel 的实例。
猜你喜欢
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 2016-01-06
  • 1970-01-01
相关资源
最近更新 更多