繁体   English   中英

允许用户在tkinter条目小部件中更改默认文本。

[英]Allow user to change default text in tkinter entry widget.

我正在编写一个Python脚本,要求用户输入文件夹的名称。 在大多数情况下,默认值就足够了,但是我希望出现一个输入框,允许用户覆盖默认值。 这是我所拥有的:

from Tkinter import *
import time
def main():
    #some stuff
    def getFolderName():
        master = Tk()
        folderName = Entry(master)
        folderName.pack()
        folderName.insert(END, 'dat' + time.strftime('%m%d%Y'))
        folderName.focus_set()
        createDirectoryName = folderName.get()
        def callback():
            global createDirectoryName
            createDirectoryName = folderName.get()
            return 
        b = Button(master, text="OK and Close", width=10, command=callback)
        b.pack()
        mainloop()
        return createDirectoryName
    getFolderName()

   #other stuff happens....
    return

if __name__ == '__main__':
    main()

我对tkInter几乎一无所知,有2个问题。

  1. 是在回调函数中使用global createDirectoryName覆盖默认条目的最佳方法吗?
  2. 按下按钮时如何使按钮关闭窗口。 我试过了

     def callback(): global createDirectoryName createDirectoryName = folderName.get() master.destroy 

但这只是在运行脚本时破坏了窗口。

我不知道您在Tkinter的经验如何,但是我建议您使用课程。

try:
    from tkinter import * #3.x
except:
    from Tkinter import * #2.x


class anynamehere(Tk): #you can make the class inherit from Tk directly, 
    def __init__(self): #__init__ is a special methoed that gets called anytime the class does 
        Tk.__init__(self) #it has to be called __init__
        #further code here e.g.
        self.frame = Frame()
        self.frame.pack()
        self.makeUI()
        self.number = 0 # this will work in the class anywhere so you don't need global all the time
    def makeUI(self):
        #code to make the UI
        self.number = 1 # no need for global
        #answer to question No.2
        Button(frame, command = self.destroy).pack()


anyname = anynamehere() #remember it alredy has Tk
anyname.mainloop()

另外,为什么要覆盖默认输入行为? 解决的办法是制作另一个按钮并像这样将命令绑定到该按钮

    self.enteredtext = StringVar()
    self.entry = Entry(frame, textvariable = self.enteredtext)
    self.entry.pack()
    self.button = Button(frame, text = "Submit", command = self.getfolder, #someother options, check tkitner documentation for full list)
    self.button.pack()
def getfolder(self): #make the UI in one method, command in other I suggest
    text = self.enteredtext.get()
    #text now has whats been entered to the entry, do what you need to with it

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM