2011-08-02 153 views
0

我想用單選按鈕編寫一個GUI(實際上是一個PyMOL插件)。我需要單選按鈕在一個函數中。我有兩個問題(如果單選按鈕在功能之外,我沒有任何問題):tkinter單選按鈕不起作用

1)最後兩個單選按鈕看起來灰色並被選中。 (我認爲正確的行爲應該只有一個檢查,沒有灰色)設置不同的默認值(使用ref_value.set())不會改變任何東西

2)我總是得到默認值(「1」例如)點擊提交按鈕時。

from Tkinter import * 

def __init__(self): 
    """this adds the Plugin to the PyMOL menu""" 
    self.menuBar.addmenuitem('Plugin', 'command', 
         'Plugin name', 
         label = 'plugin', 
         command = lambda : draw_gui()) 

def draw_gui(): 
    global v 
    master = Tk() 
    master.title(' title ') 
    Button(master, text='Submit', command=submit).pack(side=BOTTOM) 
    v = StringVar() 
    v.set(1) 
    Radiobutton(master, text='option 1', variable=v, value=1).pack(side=LEFT) 
    Radiobutton(master, text='option 2', variable=v, value=2).pack(side=LEFT) 
    Radiobutton(master, text='option 3', variable=v, value=3).pack(side=LEFT) 
    master.mainloop() 


def submit(): 
    print v.get() 

在此先感謝

回答

2

我應該明確設置主設備,否則將使用PyMOL GUI作爲主設備。

v = StringVar(master=master) 

PS:謝謝托馬斯霍爾德的答案。

+0

謝謝!我知道這真的很老,但我遇到了同樣的問題,我準備把我的電腦扔在窗外 - 這解決了問題!謝謝! –

0

它爲我(我複製你的代碼,並添加行from Tkinter import *if __name__ == "__main__": draw_gui()我假設你有太多)。所有的單選按鈕都可以工作,並且在輸出中我會得到1,2,3。

因此,如果您運行的是相同的代碼,則說明環境存在問題。我在Ubuntu 10.04上安裝了Tkinter 73770和Python 2.6.5,並從命令行運行腳本。

你可能試圖從IDLE運行它嗎?對於使用Tkinter的其他腳本,這通常不會很好,因爲它是用Tkinter自己寫的。如果是這樣,請嘗試從命令行運行。

+0

你是對的代碼按照你說的方式工作。我沒有'__name__ =='__main__「:draw_gui()'。我正在嘗試編寫一個PyMOl插件[鏈接](http://www.pymolwiki.org/index.php/Plugins_Tutorial)我將編輯我的問題以添加整個代碼 – aloctavodia

+0

在新代碼中,它看起來像其中至少有一部分意味着成爲「類」定義的一部分。你能發佈自己編譯和運行的儘可能短的代碼片段,但不能像你期望的那樣工作嗎? – RoundTower

+0

我編輯代碼,現在是最短的代碼。 函數'__init __(self)'是加載代碼作爲PyMOL插件所必需的。我按照這個[教程]中的說明(http://www.pymolwiki.org/index.php/Plugins_Tutorial)。如果我省略了這個函數,而是添加'if __name__ =='__main__「這一行:draw_gui()'我可以從終端運行代碼,並且按預期工作。 – aloctavodia