【问题标题】:Trouble importing a module with radiobuttons - python使用单选按钮导入模块时遇到问题 - python
【发布时间】:2014-01-07 04:48:42
【问题描述】:

您好,我制作了一个可以运行其他各种程序的程序。我导入了模块,它适用于不涉及单选按钮的程序。带有单选按钮的程序在它们自己运行时可以正常工作。当它们通过我的菜单程序运行时,单选按钮不提供 IntVar 值。有人对如何解决这个问题有任何想法吗?这些模块是我自己的程序,但它们都使用 Tkinter。这是菜单的代码:

from Tkinter import *
def cmd():
    if var.get() == 1:
        import animal_age_calculator
        animal_age_calculator.createDisplay()
    if var.get() == 2:
        import temperatureCalculator
        temperatureCalculator.createDisplay()
    if var.get() == 3:
        import calculator
        calculator.createDisplay()
    if var.get() == 4:
        import currencyConverter
        currencyConverter.createDisplay()

def createDisplay():
    global var
    root = Tk()
    root.title('Calculator')

    title = Label(root, text='Please Select which Calculator you would like to use',      font=50)
    title.grid(row=0, column=0)

    calcType = Frame(root)
    calcType.grid(row=1, column=0)
    var = IntVar()
    animal = Radiobutton(calcType, text='Animal Age Calculator', variable=var, value=1)
    animal.pack()

    tempConverter = Radiobutton(calcType, text='Temperature Calculator', variable=var, value=2)
    tempConverter.pack()

    calc = Radiobutton(calcType, text='Calculator', variable=var, value=3)
    calc.pack()

    currency = Radiobutton(calcType, text='Currency Converter', variable=var, value=4)
    currency.pack()

    select = Button(root, text='Go', command=cmd)
    select.grid(row=2, column=0)

    root.mainloop()

if __name__ == '__main__':
    createDisplay()

这是其中一个单选按钮程序的代码:

from Tkinter import *
def convert(temperature):
    global var4
    a = var4.get()
    print(str(a))
    if a == 1:
        print 'test2'
        display.delete(1.0, END)
        finalTemp = int(temperature)*1.8+32
        finalTemp = round(finalTemp, 1)
        display.insert(INSERT, finalTemp)
    if a == 2:
        display.delete(1.0,END)
        finalTemp = int(temperature)-32/1.8
        finalTemp = round(finalTemp, 1)
        display.insert(INSERT, finalTemp)

def createDisplay():
    global display, var4
    root = Tk()
    root.title('Temperature Converter')
    root.resizable(width=False, height=False)

    title = Label(root, text="Welcome to the temperature converter", font=36)
    title.grid(row=0, column=1, columnspan=3)

    selTemp = LabelFrame(root, text="Please select your temperature")
    selTemp.grid(row=1, column=2)

    temp = Scale(selTemp, orient=HORIZONTAL, sliderlength=20, from_=0, to=250,  length=250, command=convert)
    temp.pack()
    temperature = temp.get()

    displayFrame = LabelFrame(root, text="Your converted temperature is")
    displayFrame.grid(row=1, column=3)
    display = Text(displayFrame, width=6, height=1)
    display.pack()

    var4 = IntVar()
    tempType = LabelFrame(root, text='Please select your temperature you would like to convert')
    tempType.grid(row=1, column=1)
    celcius = Radiobutton(tempType, text="Celcius", variable=var4, value=1)
    celcius.pack()
    fahrenheit = Radiobutton(tempType, text="Fahrenheit", variable=var4, value=2)
    fahrenheit.pack()
    root.mainloop()

if __name__ == '__main__':
    createDisplay()

【问题讨论】:

  • 你能给出一些示例代码吗?另外请详细说明您正在使用的模块。
  • 这些模块是我自己的python代码,但它们都使用Tkinter。
  • 这是一个好的开始,但您可能必须提供一些示例代码供人们尝试解决您的问题 :) 如果您遇到错误,那么如果您还可以提供有用的 Traceback。
  • 我已经用代码编辑了原帖。
  • 没有错误发生,只是不起作用

标签: python import module tkinter radio-button


【解决方案1】:

问题的症结在于您要创建两个Tk 实例。你不能那样做。 Tkinter 旨在让您在任何时候只创建一个 Tk 实例。您的模块应该创建Toplevel 的实例而不是Tk 的实例,并且在导入模块时它们不应创建新的事件循环。

【讨论】:

  • 我现在试试这个……如果你说的是真的,为什么没有单选按钮的程序可以正常工作?
  • @DecStanley:无法确定,但我猜这是因为这些其他程序不使用 IntVars 或 StringVars。问题可能比这更深一些,太深了,无法在评论框中回答。可以这么说,Tkinter 的设计目的不是让两个 Tk 实例在同一个进程中同时运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 2011-01-17
  • 2014-12-08
  • 2020-06-28
  • 2014-03-21
相关资源
最近更新 更多