程序在启动时运行按钮命令?

时间:2013-12-21 21:05:01

标签: python button tkinter openfiledialog

所以我有一个程序,基本上应该有一个按钮,在(用户名)文件夹中打开一个文件对话框。但是当我运行程序时,它甚至没有按下按钮就会打开。更重要的是,按钮甚至没有显示出来。所以除了这个问题,我还必须找到一种方法将所选目录转换为字符串。

import tkinter
import tkinter.filedialog
import getpass
gui = tkinter.Tk()
user = getpass.getuser()
tkinter.Button(gui, command=tkinter.filedialog.askopenfilename(initialdir='C:/Users/%s' % user)).pack()
gui.mainloop()

3 个答案:

答案 0 :(得分:1)

关于第一个问题,您需要在函数中调用tkinter.filedialog.askopenfilename,以便它不会在启动时运行。我今天早上刚刚回答了一个关于此问题的问题,所以你可以查看here的答案。

关于第二个问题,该按钮未显示,因为您从未将其放在窗口上。您可以使用grid方法:

button = tkinter.Button(gui, command=lambda: tkinter.filedialog.askopenfilename(initialdir='C:/Users/%s' % user))
button.grid()

总而言之,您的代码应该是这样的:

import tkinter
import tkinter.filedialog
import getpass
gui = tkinter.Tk()
user = getpass.getuser()
button = tkinter.Button(gui, command=lambda: tkinter.filedialog.askopenfilename(initialdir='C:/Users/%s' % user))
button.grid()
gui.mainloop()

答案 1 :(得分:0)

您忘了在按钮上使用几何管理器:

button = tkinter.Button(window, command=test)
button.pack()

如果不这样做,则不会绘制按钮。您可能会发现此链接很有用:http://effbot.org/tkinterbook/pack.htm。 请注意,要将命令传递给处理程序,您只需要编写函数的名称(就像在另一个答案中描述的那样)。

答案 2 :(得分:0)

这是一个老问题,但我只是想添加一种防止 Tkinter 在启动时运行方法的替代方法。您可以使用 Python 的 void CellValueChanged(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex = this.columnIpAddress.DisplayIndex)) { // Ip address edited; update the PingStatus this.UpdatePingTestResult(this.dgvPingTestResults.Rows[e.RowIndex]); } } (doc):

functools.partial