Python 对话框中的用户输入
python中是否有用于图形用户输入的库。我知道Python 对话框中的用户输入,python,python-3.x,user-interface,tkinter,Python,Python 3.x,User Interface,Tkinter,python中是否有用于图形用户输入的库。我知道tk,但我相信这需要一些代码来完成。我正在寻找最短的解决方案 a = input('Enter your string here:') 作为替代,我希望得到一个对话框,以便用户可以在那里输入 这并没有达到目的。这仅显示对话框,不能提供输入条目 import ctypes # An included library with Python install. ctypes.windll.user32.MessageBoxW(0, "Your
tk
,但我相信这需要一些代码来完成。我正在寻找最短的解决方案
a = input('Enter your string here:')
作为替代,我希望得到一个对话框,以便用户可以在那里输入
这并没有达到目的。这仅显示对话框,不能提供输入条目
import ctypes # An included library with Python install.
ctypes.windll.user32.MessageBoxW(0, "Your text", "Your title", 1)
解决方案有两种选择。您可以通过pip获得两个包,一个是easygui,另一个是easygui_qt。easygui基于tcl,easygui_qt基于qt窗口管理器,设置起来有点困难,但使用起来也很简单,还有几个选项 他们所需要使用的只是导入包,
importeasygui
,然后,要获得用户响应,您将使用一行
myvar = easygui.enterbox("What, is your favorite color?")
谷歌“python easygui”获取更多详细信息。您可以从中获得easygui。这里是我不久前创建的一个模块,用于使用GUI管理基本的打印和输入。它使用tkinter:
from tkinter import *
def donothing(var=''):
pass
class Interface(Tk):
def __init__(self, name='Interface', size=None):
super(interface, self).__init__()
if size:
self.geometry(size)
self.title(name)
self.frame = Frame(self)
self.frame.pack()
def gui_print(self, text='This is some text', command=donothing):
self.frame.destroy()
self.frame = Frame(self)
self.frame.pack()
Label(self.frame, text=text).pack()
Button(self.frame, text='Ok', command=command).pack()
def gui_input(self, text='Enter something', command=donothing):
self.frame.destroy()
self.frame = Frame(self)
self.frame.pack()
Label(self.frame, text=text).pack()
entry = StringVar(self)
Entry(self.frame, textvariable=entry).pack()
Button(self.frame, text='Ok', command=lambda: command(entry.get())).pack()
def end(self):
self.destroy()
def start(self):
mainloop()
# -- Testing Stuff --
def foo(value):
global main
main.gui_print(f'Your name is {value}.', main.end)
def bar():
global main
main.gui_input('What is your name?', foo)
if __name__ == '__main__':
main = interface('Window')
bar()
main.start()
它包括一个如何使用它的示例。我认为这是在没有任何外部设备的情况下最短的:
开始:
from tkinter import *
root=Tk()
而不是
a=input('enter something')
:
使用函数DoSomethingWithInput(a)
而不是打印(“某些文本”):
使用
DoSomething()
作为下一步操作。使用海龟<代码>turtle.textinput(“标题”、“提示”)
以下是一个例子:
从海龟导入文本输入
name=textinput(“name”,“请输入您的姓名:”)
打印(“你好”,姓名+“!”)
问题是,我想避免使用外部库,因为在我的环境中有一些合理的原因,我只想使用python安装提供的库。说easygui
是基于tcl的,这有点误导。在内部,它使用了tkinter
,这是一个标准的Python库,用于与tk/tcl进行接口@RishuAl:即使你不能使用第三方库,下载easygui
并查看其源代码(即enterbox()
函数是如何实现的)可能对你非常有用。@martineau谢谢你,先生。我一定会看看的。没关系。:)我想避免使用外部库。@iCodez和RishuA。当你删除对话的第一部分而不是其余部分时,会让其他人感到困惑。啊!似乎在编辑时被删除了。这是我用的手机。root=tk.tk()root.draw()in_csv_file=simpledialog.askstring(“Some_Name”,“Enter csv file Name”,parent=root)RishuA:要格式化注释中的代码,请使用倒勾(`)字符,将代码括在注释中。如下所示:root=tk.tk()
root.draw()在\u csv\u file=simpledialog.askstring(“一些\u名称”,“输入csv文件名”,parent=root)”
感谢您的努力。但是我可以使用root=tk.tk()rootdraw()in=simpledialog.askstring(“Input”,“blba bla”Name”,parent=root)如前所述,由于某些原因,我不想使用任何外部库。@RishuA只需将其复制到您的代码中,并在之后保留所有内容,如果\uuuuuuu name\uuuuu==“uuuuu main\uuuuu':
我理解您的观点。我回答这个问题的目的是为了找到最短的解决方案(最短的代码)。请检查我的问题。不过,我非常感谢您为我所做的努力。需要时我一定会尝试。@RishuA我认为标准tk三行代码是最好的,没有任何外部代码。(三行用于输入,一行用于打印)谢谢!我知道。:)你真的付出了努力,我尊重你。RishuA:你可以用tkinter
轻松创建自定义对话框。这里有一些(日期为Python 2),但如果你在线搜索(包括本网站),你可能会找到更多的最新信息。
a=StringVar()
Label(root, text='enter something').pack()
Entry(root, textvariable=a).pack()
Button(root, text='Ok', command=lambda:DoSomethingWithInput(a.get)).pack()
Label(root, text='some text').pack()
Button(root, text='Ok', command=DoSomething).pack()