Python 我做了一个打开谷歌的按钮。我已经解决了这个问题,但我想知道为什么它会起作用

Python 我做了一个打开谷歌的按钮。我已经解决了这个问题,但我想知道为什么它会起作用,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在用Tkinter制作一个小程序(实际上是第一个)。这个程序应该有网站的徽标,按下按钮会打开网站 google_url = 'https://www.google.com' def OpenUrl(): webbrowser.open_new(google_url) button1 = tk.Button(root, command=OpenUrl) 此代码起作用(打包/导入所有内容后) 这是之前的代码: button1 = tk.Button(root, command=we

我正在用Tkinter制作一个小程序(实际上是第一个)。这个程序应该有网站的徽标,按下按钮会打开网站

google_url = 'https://www.google.com'

def OpenUrl():
    webbrowser.open_new(google_url)

button1 = tk.Button(root, command=OpenUrl)
此代码起作用(打包/导入所有内容后)

这是之前的代码:

button1 = tk.Button(root, command=webbrowser.open_new('https://www.google.com'))

我是Python新手,所以我真的很想了解为什么这种改变会奏效。是Python解释器做了什么?现在,这并不是我写的全部代码,所以如果你认为我应该展示这一点,那么问我,但这是允许代码工作的差异。(按下按钮时打开谷歌。之前,当代码运行时,它打开谷歌,但没有打开tkinter)

为您的第一个项目欢呼

您的第一次尝试无效,因为
命令
arg必须是函数<代码>webbrowser.open_new('https://www.google.com“)是一个函数,它已经被调用并进行了计算。现在它等于
open\u new()
s返回值(即)

在单击按钮之前,不会计算
OpenUrl
的内容,因为函数仅在调用时运行。lambda(一个未命名的内嵌函数)也可以工作:

button1 = tk.Button(root, command= lambda: webbrowser.open_new('https://www.google.com'))

快乐编码

command
的值应该是单击按钮时要调用的函数,因此它应该是对函数的引用。代码“before”被指定为webbrowser.open_new(…)的结果,而不是对函数的引用。