我有一个数组,其中包含一些网址。
我基本上想在tk中创建一个按钮,用于在浏览器中打开网址。
到目前为止,我已经创建了按钮,但是,当我运行.py文件时,似乎打开页面的功能正在被击中 - 没有为按钮做好准备。
import tkinter as tk
import webbrowser as Web
urls = [[1, 'http://www.google.co.uk','Google'],[2, 'http://www.bbc.co.uk','BBC']];
def urlOpen(target):
Web.open(target)
window = tk.Tk()
window.overrideredirect(1)
window.update_idletasks()
for url in urls:
urlTarget = url[0]
labelurl = tk.Button(window, text=url[2], height = 2, command = urlOpen(url[1]), width = 10)
labelurl.grid(row = url[0] + 1 , column = 1)
close = tk.Button(window, text = 'Quit', command = window.destroy, width = 10)
close.grid(row = len(urls) + 2, column = 1)
window.mainloop()
我知道,使用OOP python会更容易 - 不过我是新手,并且还在挑选!
答案 0 :(得分:0)
发生的事情是你在创建按钮时调用该函数 - 而不是在点击它时调用该函数:
labelurl = tk.Button(window, text=url[2], height = 2, command = urlOpen(url[1]), width = 10)
您需要的是推迟函数调用:
for url in urls:
onclick = lambda url=url[1]: urlOpen(url)
labelurl = tk.Button(window, text=url[2], height = 2, command = onclick, width = 10)
labelurl.grid(row = url[0] + 1, column = 1)
这里我为每个url创建了一个新函数 - 当没有参数调用时,该函数将使用正确的url调用urlOpen
。 (注意我正在使用标准的lambda x=y: x
技巧来确保lambda函数在循环中获取正确的url。)