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

python中是否有用于图形用户输入的库。我知道
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()