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