Python 2.7 Tkinter открыть веб-браузер нажмите - PullRequest
3 голосов
/ 05 января 2012
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()

Моя цель - открыть URL, когда я нажимаю кнопку в графическом виджете. Тем не менее, я не уверен, как это сделать. Python открывает два новых окна, когда я запускаю скрипт, не нажимая что-нибудь. Кроме того, при нажатии кнопки ничего не происходит.

Ответы [ 2 ]

4 голосов
/ 05 января 2012

Вы должны использовать

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

, это правильный способ отправки обратного вызова, когда требуются аргументы.
Здесь здесь :

Распространенной ошибкой новичка является вызов функции обратного вызова при создании виджета.То есть, вместо того, чтобы давать только имя функции (например, «обратный вызов»), программист добавляет в функцию скобки и значения аргументов:

Если вы сделаете это, Python вызовет функцию обратного вызова перед созданием виджетаи передать возвращаемое значение функции в Tkinter.Затем Tkinter пытается преобразовать возвращаемое значение в строку и говорит Tk вызвать функцию с этим именем, когда кнопка активирована.Это, вероятно, не то, что вы хотели.

Для таких простых случаев, как этот, вы можете использовать лямбда-выражение в качестве связи между Tkinter и функцией обратного вызова:

0 голосов
/ 05 января 2012

Кроме того, вам не нужно передавать URL в качестве аргумента команды. Очевидно, ваш метод OpenUrl застрял бы, открывая этот 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...