当前位置: 首页 > 面试题库 >

Tkinter按钮命令在运行程序时激活吗?

哈宪
2023-03-14
问题内容

我正在尝试制作一个构建检索表单,似乎按钮有问题…我是Python / tkinter GUI编程(和一般的GUI编程)的新手,并借用了Hello
World应用程序的框架,并以此为基础。

在下面的代码中,我将“浏览”按钮的“命令”选项设置为在单击类时调用类的内部get_dir()函数。但是,一旦我尝试运行该应用程序,就会调用get_dir()函数,并提示我选择一个目录。有什么想法为什么会发生这种情况,以及如何使它正常运行?

from Tkinter import *
import tkFont
from tkFileDialog import askdirectory

class App:

    def __init__(self, master):

        fontHead = tkFont.Font(family="Arial", size=10, weight=tkFont.BOLD)
        fontBold = tkFont.Font(family="Arial", size=8, weight=tkFont.BOLD)
        fontReg =  tkFont.Font(family="Arial", size=8)

        frameN = Frame(master)
        frameN.grid(row=0,padx=5,pady=5)

        frameXBH = Frame(frameN)
        frameXBH.grid(row=0,columnspan=5,padx=5)

        Canvas(frameXBH,borderwidth=0,relief="flat",height=1,width=20,background="#cccccc").grid(row=0)
        Label(frameXBH, text="Xbox 360",font=fontBold,width=9).grid(row=0,column=1)
        Canvas(frameXBH,borderwidth=0,relief="flat",height=1,width=440,background="#cccccc").grid(row=0,column=2,sticky="WE")

        Label(frameN, text="Destination Path:",font=fontReg).grid(row=1,sticky="W")
        xbPath = Entry(frameN,width=30,font=fontReg)
        xbPath.grid(row=1,column=1,sticky="W")
        xbBrowse = Button(frameN,text="Browse...",font=fontReg,command=self.get_dir(xbPath))
        xbBrowse.grid(row=1,column=2,sticky="W")
        xbRel = Checkbutton(frameN,text="Release",font=fontReg)
        xbRel.grid(row=1,column=3,sticky="W")
        xbShip = Checkbutton(frameN,text="Ship",font=fontReg)
        xbShip.grid(row=1,column=4,sticky="W")

        Canvas(frameN,borderwidth=1,relief="groove",width=550,height=0).grid(row=2,columnspan=5,pady=10)

        # SAVE AND CANCEL

        btnSave = Button(frameN,text="Save",width=10)
        btnSave.grid(row=3,column=3,sticky="E")

        btnCancel = Button(frameN,text="Cancel",width=10)
        btnCancel.grid(row=3,column=4,sticky="W")

    def get_dir(self,box):
        tmp = askdirectory(mustexist=1,title="Please select a destination")
        tmp = tmp.replace("/","\\")
        box.delete(0,END)
        box.insert(0,tmp)

root = Tk()
root.resizable(0,0)

app = App(root)

root.mainloop()

问题答案:

将事件处理程序设置为 lambda函数 ,该 函数get_dir()使用所需的任何参数调用:

xbBrowse = Button(frameN, text="Browse...", font=fontReg, command=lambda : self.get_dir(xbPath))


 类似资料:
  • 问题内容: 我正在尝试创建一些按钮(带有for),如下所示: 并且每个按钮都有自己的参数(Test得到Test和Test2得到Test2),但是当我按下按钮时,它们都打印“ Test2”,这意味着它们使用具有相同参数的相同功能。 我该如何解决? 问题答案: 问题是你的lamba在for循环中。你的lambda正在使用该name变量,但是name每次通过for循环都会重新分配该变量。因此,最后,所有

  • 问题内容: 尝试在画布上实现按钮,该按钮在单击时会打开文件。 我的尝试如下 不幸的是,我的代码在我单击按钮之前就打开了该文件,该文件已运行。为什么? 问题答案: 当Python处理这两行时,它会在第一行看到这一点: 并将其解释为有效的函数调用。因此,它调用了该函数。 要解决此问题,请定义一个函数来处理该行之前的click事件,然后将按钮的opion分配给该函数: 或者,在这种情况下,甚至更好/更干

  • 我指的是这个URL https://cloud.google.com/speech/docs/gett-start来开始使用google speech API。根据网站的建议,我遵循了以下步骤 创建或选择项目。 为该项目启用云语音API 创建服务帐户 以JSON形式下载私钥 我在命令行上安装了gcloud。现在,当我尝试使用下面的命令激活服务帐户时, gcloud auth activate-se

  • javac-cp“lib/*”src/com/company/main.java 在myproject/src中,我尝试使用: JAVA-CP。COM/公司/主要 C:\myproject\src>javac-cp“lib/*”com/company/main.java C:\myproject\src>java-cp.;“lib/*”com/company/main 现在,代码编译和执行没有任何

  • 问题内容: 我想在我的C程序中运行Shell命令。但问题是我不想让我的程序等到命令执行完毕。无需读取shell命令的输出(无论如何它都不会返回数据)那么,基本上可以吗? 问题答案: 并且是你所需要的

  • 问题内容: 所以我在这里有一个菜鸟般的时刻,我以前从未使用过命令行来运行Java程序,但现在我需要。我遇到的问题是,当我尝试运行程序时,出现ClassNotFoundException。我的课叫做OmadUpdate。我已经使用javac命令将OmadUpdate.java文件编译为OmadUpdate.class。我已经检查了目录,并且它们都绝对存在,但是当我运行java OmadUpdate命