2012-01-05 18 views
2
from Tkinter import * 
import webbrowser 

root = Tk() 
frame = Frame(root) 
frame.pack() 

url = 'http://www.sampleurl.com' 

def OpenUrl(url): 
    webbrowser.open_new(url) 

button = Button(frame, text="CLICK", command=OpenUrl(url)) 

button.pack() 
root.mainloop() 

私の目標は、GUIウィジェットのボタンをクリックするときにURLを開くことです。しかし、私は これを行う方法を確認していません。 をクリックせずにスクリプトを実行すると、Pythonは2つの新しいウィンドウを開きます。また、ボタンをクリックすると何も起こりません。Python 2.7 Tkinter open webbrowserクリック

答えて

3

あなたは、これは、引数が必要なときにコールバックを送信する正しい方法です

button = Button(root, text="CLCK", command=lambda aurl=url:OpenUrl(aurl)) 

を使用する必要があります。
hereから:

共通初心者のミスは ウィジェットを構築するときにコールバック関数を呼び出すことです。それだけではなく、 関数の名前(例えば「コールバック」)を与えると、ある、プログラマは関数に括弧と 引数値を追加します。

あなたがこれを行う場合は、Pythonは ウィジェットを作成する前に、コールバック関数を呼び出します。関数の戻り値をTkinterに渡します。 Tkinter は戻り値を文字列に変換しようとし、ボタンがアクティブになったときにその名前の関数を に呼び出すようTkに指示します。これはおそらく です。

このような単純なケースでは、あなたはTkinterのコールバック関数との間のリンク としてラムダ式を使用することができますが:

0

また、コマンドの引数としてURLを渡す必要はありません。 。明らかに、あなたのOpenUrlメソッドは、この場合1つのURLを開いたままになるでしょうが、うまくいくでしょう。

from Tkinter import * 
import webbrowser 

url = 'http://www.sampleurl.com' 

root = Tk() 
frame = Frame(root) 
frame.pack() 

def OpenUrl(): 
    webbrowser.open_new(url) 

button = Button(frame, text="CLICK", command=OpenUrl) 

button.pack() 
root.mainloop()