【问题标题】:Tkinter program runs button command on startup?Tkinter程序在启动时运行按钮命令?
【发布时间】:2014-01-10 11:47:27
【问题描述】:

所以我有一个程序,它基本上应该有一个按钮,可以在(用户名)文件夹中打开一个文件对话框。但是当我运行程序时,它甚至无需按下按钮即可打开。更重要的是,按钮甚至没有出现。所以除了这个问题我还得想办法把选中的目录变成一个字符串。

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()

【问题讨论】:

    标签: python button tkinter openfiledialog


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      关于您的第一个问题,您需要将对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()
      

      【讨论】:

      • 谢谢!那么现在问题的第二部分:我将如何将目录变成字符串值?
      【解决方案3】:

      这是一个老问题,但我只是想添加一种替代方法来防止 Tkinter 在启动时运行方法。可以使用 Python 的functools.partialdoc):

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

      【讨论】:

        猜你喜欢
        • 2011-04-11
        • 2015-03-24
        • 2016-04-06
        • 2019-05-10
        • 1970-01-01
        • 2022-07-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多