easygraphics.dialog包

一个简单易用的对话框函数库。

你可以用它来创建或显示对话框。

基于EasyGUI_Qt(https://github.com/aroberge/easygui_qt/)。由于原EasyGUI-Qt库无法与EasyGraphics一起工作,因此使用该库代替。

一个简单的例子:

>>> from easygraphics.dialog import *
>>> name=get_string("name")
>>> show_message("Your name is "+name)

函数列表

get_choice(message, title, choices) 显示一个对话框,让用户从下拉列表中选择一项
get_color([color]) 显示一个色彩选择对话框,返回用户选择的颜色
get_color_hex([color]) 显示一个色彩选择对话框,以16进制整数字符串形式返回用户选择的颜色。
get_color_rgb([color]) 显示一个色彩选择对话框,以(r,g,b)三元组的形式返回用户选择的颜色。
get_continue_or_cancel(question, title, …) 选择继续或者取消
get_date(title) 选择日期
get_directory_name(title) 选择一个目录
get_file_names(title, filter) 选择文件
get_float(message, title, default_value, …) 显示一个对话框,让用户在指定范围和精度下选择一个浮点数。
get_int(message, title, default_value, min_, …) 显示一个对话框,让用户在指定范围内选择一个整数。
get_list_of_choices(title, choices) 显示一个列表让用户选择(可复选)
get_many_strings(title, labels, masks) 同时输入多个字符串
get_new_password(title, labels) 修改密码对话框
get_password(message, title) 输入密码对话框。
get_save_file_name(title, filter) 打开文件以保存对话框。
get_string(message, title, default_response) 简单的文本输入对话框。
get_username_password(title, labels) 获取用户名和密码。
get_yes_or_no(question, title) 让用户选择yes或no。
set_dialog_font_size(size) 设置对话框的字体大小。
show_html(title, text, width, height) 在窗口中显示html代码。
show_image_dialog(image, title) 在窗口中显示图片。
show_lists_table(*args, column_names, title, …) 以表格形式显示多个列表。
show_message(message, title) 显示一个简单消息框。
show_objects(datas, fields, field_names, …) 以表格形式显示一组对象。
show_text(title, text, width, height) 在窗口中显示一大段文字。
show_table(datas, fields, field_names, …) 以表格形式显示一组对象。
show_code(title, code, width, height) 在窗口中显示代码。
show_file(file_name, title, file_type, …) 在窗口中显示文件内容。

函数

easygraphics.dialog.set_dialog_font_size(size: int)

设置对话框的字体大小。

参数:size – font size
>>> from easygraphics.dialog import *
>>> set_dialog_font_size(18)
>>> show_message("font setted!")
easygraphics.dialog.show_message(message: str = 'Message', title: str = 'Title')

显示一个简单消息框。

参数:
  • message – 消息字符串
  • title – 对话框标题
>>> from easygraphics.dialog import *
>>> show_message()
../_images/show_message.png
easygraphics.dialog.show_text(title: str = 'Title', text: str = '', width: int = 720, height: int = 450)

在窗口中显示一大段文字。

参数:
  • title – 对话框标题
  • text – 要显示在对话框中的内容
  • width – 对话框窗口宽度
  • height – 对话框窗口高度
>>> from easygraphics.dialog import *
>>> show_text("Hello","Hello world!")
../_images/show_text.png
easygraphics.dialog.show_code(title: str = 'Title', code: str = '', width: int = 720, height: int = 450)

在窗口中显示代码。

参数:
  • title – 对话框标题
  • code – 要显示在对话框中的内容
  • width – 对话框窗口宽度
  • height – 对话框窗口高度
../_images/show_code.png
easygraphics.dialog.show_file(file_name: str = None, title: str = 'Title', file_type: str = 'text', width: int = 720, height: int = 450)

在对话框中显示文件内容。虽然在窗口中可以编辑文件的内容,但是所作修改并不会保存。

参数:
  • title – 对话框标题
  • file_name – 文件路径
  • file_type – 可以的值:text, code, html, python
  • width – 对话框窗口宽度
  • height – 对话框窗口高度

缺省的情况下,file_type参数被设为``text``;如果设为``code``, 内容使用monospace字体显示;如果设为``python``, 内容使用python语法高亮显示;如果设为``html``,内容使用html语法高亮显示。

注意:请大家推荐一个更好的Python语法高亮器。

>>> from easygraphics.dialog import *
>>> show_file()
../_images/show_file.png
easygraphics.dialog.show_objects(datas: Sequence[T_co], fields: Sequence[str] = None, field_names: Sequence[str] = None, title: str = 'Title', width: int = 720, height: int = 450, enable_sorting=False)

以表格形式显示一组对象。

>>> from easygraphics.dialog import *
>>> class Person:
>>>     def __init__(self,name,age,sex):
>>>         self.name=name
>>>         self.age = age
>>>         self.sex = sex
>>> objs = [Person("Jack", 22, "M"), Person("Micheal", 40, "F"), Person("David", 24, "M")]
>>> show_objects(title="peoples",datas=objs,fields=["name","age","sex"],field_names=["NAME","AGE","SEX"])
../_images/show_objects.png
参数:
  • datas – 要显示的对象列表
  • fields – 要显示的对象属性列表
  • field_names – 显示在表头的对象属性名称
  • title – 对话框窗口标题
  • width – 对话框窗口宽度
  • height – 对话框窗口高度
  • enable_sorting – if data can be sorted by clicking the column name
easygraphics.dialog.get_abort(message: str = 'Major problem - or at least we think there is one...', title: str = 'Major problem encountered!')

显示问题的说明。如果用户点击”abort”,程序会执行sys.exit()然后结束执行。如果用户点击”ignore”,程序继续执行。

参数:
  • title – 对话框标题
  • message – 要显示的信息
>>> from easygraphics.dialog import *
>>> get_abort()
../_images/get_abort.png
easygraphics.dialog.get_choice(message: str = 'Select one item', title: str = 'Title', choices: List[str] = None) → Optional[str]

显示一个对话框,让用户从下拉列表中选择一项

参数:
  • message – 要显示给用户的输入提示信息
  • title – 对话框窗口标题
  • choices – 包含待选择项名称的列表。
返回:

输入的字符串,或者None如果用户点击了”cancel”,或者直接关闭了对话框。

>>> from easygraphics.dialog import *
>>> choices = ["CPython", "Pypy", "Jython", "IronPython"]
>>> reply = get_choice("What is the best Python implementation", choices=choices)
../_images/get_choice.png
easygraphics.dialog.get_color_hex(color='white') → Optional[str]

显示颜色选择对话框,以16进制整数字符串的形式(如’#ffffff’)返回选择的颜色;如果用户取消或者直接关闭对话框,则返回None。

>>> from easygraphics.dialog import *
>>> color = get_color_hex()
../_images/select_color.png
easygraphics.dialog.get_color_rgb(color='white') -> (<class 'int'>, <class 'int'>, <class 'int'>)

显示一个色彩选择对话框,以(r,g,b)三元组的形式返回用户选择的颜色。如果用户取消或者直接关闭对话框,则返回None。

>>> from easygraphics.dialog import *
>>> color = get_color_rgb()
../_images/select_color_fr.png
easygraphics.dialog.get_color(color='white') → PyQt5.QtGui.QColor

显示一个色彩选择对话框,返回用户选择的颜色

>>> from easygraphics.dialog import *
>>> color = get_color()
../_images/select_color_fr.png
返回:选择的颜色
easygraphics.dialog.get_continue_or_cancel(question: str = 'Processed will be cancelled!', title: str = 'Title', continue_button_text: str = 'Continue', cancel_button_text: str = 'Cancel') → bool

显示警告信息,让用户选择继续执行(continue)还是中止程序(cancel)。

参数:
  • question – 要显示的问题
  • title – 窗口标题
  • continue_button_text – 在按钮上显示的文字
  • cancel_button_text – 在按钮上显示的文字
返回:

按”Continue”返回True, “Cancel”返回False

>>> from easygraphics.dialog import *
>>> choice = get_continue_or_cancel()
../_images/get_continue_or_cancel.png
easygraphics.dialog.get_date(title: str = 'Select Date') → datetime.date

选择日期

参数:title – 对话框标题
返回:以``datetime.date``对象形式的用户选择的日期
>>> from easygraphics.dialog import *
>>> date = get_date()
../_images/get_date.png
easygraphics.dialog.get_directory_name(title: str = 'Get directory') → str

选择一个目录

参数:title – 对话框窗口标题
返回:选择的文件夹路径。如果用户取消选择,返回空字符串。
>>> from easygraphics.dialog import *
>>> get_directory_name()
../_images/get_directory_name.png

该对话框缺省显示当前工作目录下的内容

easygraphics.dialog.get_file_names(title: str = 'Get existing file names', filter: str = 'All Files (*.*)') → str

选择文件

参数:
  • title – 对话框窗口标题
  • filter – file filter
返回:

选择的文件和文件夹列表

>>> from easygraphics.dialog import *
>>> get_file_names()
../_images/get_file_names.png

该对话框缺省显示当前工作目录下的内容

easygraphics.dialog.get_float(message: str = 'Choose a number', title: str = 'Title', default_value: float = 0.0, min_: float = -10000, max_: float = 10000, decimals: int = 3) → Optional[float]

显示一个对话框,让用户在指定范围和精度下选择一个浮点数。

参数:
  • message – 要显示给用户的输入提示信息
  • title – 对话框窗口标题
  • default_value – 显示在输入框中的缺省数值。如果超出允许选择范围,则自动设置到范围边界上。
  • min – 允许的最小值
  • max – 允许的最大值
  • decimals – 最大精度位数
返回:

用户输入的浮点数;如果用户取消或直接关闭了对话框则返回None。

>>> from easygraphics.dialog import *
>>> number = get_float()
../_images/get_float.png

注意: 在某些语言(如法语)的操作系统中,在输入数字时可能需要使用其他符号作为小数点。

easygraphics.dialog.get_int(message: str = 'Choose a number', title: str = 'Title', default_value: int = 1, min_: int = 0, max_: int = 100, step: int = 1) → Optional[int]

显示一个对话框,让用户在指定范围内选择一个整数。

注意**get_int()**是**get_integer()**的别名。

参数:
  • message – 要显示给用户的输入提示信息
  • title – 对话框窗口标题
  • default_value – 显示在输入框中的缺省数字。如果超出允许范围,会自动设置到范围边界上。
  • min – 允许的最小整数
  • max – 允许的最大整数
  • step – 当用户每次点击右侧的箭头时,输入数字的变化量
返回:

输入的整数,如果用户取消或直接关闭了对话框则返回None。

>>> from easygraphics.dialog import *
>>> number = get_int()
../_images/get_int.png

如果``default_value``大于``max_``,则会被自动设成``max_``;如果小于``min_``,则会被自动设为``min_``。

>>> number = get_integer("Enter a number", default_value=125)
../_images/get_int2.png
easygraphics.dialog.get_integer(message: str = 'Choose a number', title: str = 'Title', default_value: int = 1, min_: int = 0, max_: int = 100, step: int = 1) → Optional[int]

显示一个对话框,让用户在指定范围内选择一个整数。

注意**get_int()**是**get_integer()**的别名。

参数:
  • message – 要显示给用户的输入提示信息
  • title – 对话框窗口标题
  • default_value – 显示在输入框中的缺省数字。如果超出允许范围,会自动设置到范围边界上。
  • min – 允许的最小整数
  • max – 允许的最大整数
  • step – 当用户每次点击右侧的箭头时,输入数字的变化量
返回:

输入的整数,如果用户取消或直接关闭了对话框则返回None。

>>> from easygraphics.dialog import *
>>> number = get_int()
../_images/get_int.png

如果``default_value``大于``max_``,则会被自动设成``max_``;如果小于``min_``,则会被自动设为``min_``。

>>> number = get_integer("Enter a number", default_value=125)
../_images/get_int2.png
easygraphics.dialog.get_list_of_choices(title: str = 'Title', choices: List[str] = None) → easygraphics.dialog._indexed_order_list.IndexedOrderedDict

显示一个列表让用户选择(可复选)

参数:
  • title – 对话框窗口标题
  • choices – 待选择项列表
返回:

选中项列表

>>> from easygraphics.dialog import *
>>> choices = get_list_of_choices()
../_images/get_list_of_choices.png
easygraphics.dialog.get_many_strings(title: str = 'Title', labels: List[str] = None, masks: List[bool] = None) → easygraphics.dialog._indexed_order_list.IndexedOrderedDict

同时输入多个字符串

参数:
  • title – 对话框窗口标题
  • labels – 各输入框的标签列表
  • masks – 各输入框输入内容是否隐藏显示的列表
返回:

一个有序字典,可以标签或者序号作为关键字,取出用户输入的值

参数``masks``是一个与``choices``参数长度相同的列表,每个元素为True或者False,指明每个输入项是否隐藏显示的内容。通常用于有输入项是密码(因此需要隐藏输入内容)的情况。

>>> from easygraphics.dialog import *
>>> labels = ["User name", 'Password']
>>> masks = [False, True]
>>> reply = get_many_strings(labels=labels, masks=masks)
>>> reply
OrderedDict([('User name', 'aroberge'), ('Password', 'not a good password')])
../_images/get_many_strings.png
easygraphics.dialog.get_new_password(title: str = 'Title', labels: List[str] = None) → easygraphics.dialog._indexed_order_list.IndexedOrderedDict

修改密码对话框

参数:
  • title – 对话框窗口标题
  • labels – 一个列表,其中包含”Old password(旧密码)”、”New password(新密码)”和”Confirm new password(确认新密码)”的提示标签。三个标签必须互不相同,因为返回的字典要以它们为关键字。
返回:

一个有序字典。可以以提示标签名和序号作为关键字,从中取出用户的输入的值。

注意:该函数是``get_many_strings``的特例,密码会被自动隐藏显示。

>>> from easygraphics.dialog import *
>>> reply = get_new_password()
../_images/get_new_password.png
easygraphics.dialog.get_open_file_name(title: str = 'Get file name for open', filter: str = 'All Files (*.*)') → str

选择要打开的文件

参数:
  • title – 对话框窗口标题
  • filter – file filter
返回:

文件路径

easygraphics.dialog.get_password(message: str = 'Enter your password', title: str = 'Title') → Optional[str]

简单的密码输入框。用来让用户输入密码。

参数:
  • message – 要显示给用户的输入提示信息
  • title – 对话框窗口标题
返回:

输入的字符串,或者None如果用户点击了”cancel”,或者直接关闭了对话框。

>>> from easygraphics.dialog import *
>>> password = get_password()
../_images/get_password.png
easygraphics.dialog.get_save_file_name(title: str = 'File name to save', filter: str = 'All Files (*.*)') → str

打开文件以保存对话框。

参数:
  • title – 对话框窗口标题
  • title – 对话框窗口标题
返回:

用户选中的文件路径

如果文件已经存在,用户会得到警告,也可以取消。但是,该对话框并不会真正保存文件,实际的保存工作需要用户代码完成。

>>> from easygraphics.dialog import *
>>> get_save_file_name()
../_images/get_save_file_name.png

该对话框缺省显示当前工作目录下的内容

easygraphics.dialog.get_string(message: str = 'Enter your response', title: str = 'Title', default_response: str = '') → Optional[str]

简单的文字输入框。

参数:
  • message – 要显示给用户的输入提示信息
  • title – 对话框窗口标题
  • default_response – 显示在输入框中的缺省内容
返回:

输入的字符串,或者None如果用户点击了”cancel”,或者直接关闭了对话框。

>>> from easygraphics.dialog import *
>>> reply = get_string()
../_images/get_string.png
>>> reply = get_string("new message", default_response="ready")
../_images/get_string2.png
easygraphics.dialog.get_username_password(title: str = 'Title', labels: List[str] = None) → easygraphics.dialog._indexed_order_list.IndexedOrderedDict

获取用户名和密码。

参数:
  • title – 对话框窗口标题
  • labels – 一个包含”user name”和”password”的提示标签的列表。如果未提供该列表,则使用缺省标签。
返回:

一个有序词典,可以用标签名和序号作为关键字,取出用户输入的值。

注意:该函数是``get_many_strings``的特例,密码会被自动隐藏显示。

>>> from easygraphics.dialog import *
>>> reply = get_username_password()
>>> reply
OrderedDict([('User name', 'aroberge'), ('Password', 'not a good password')])
../_images/get_username_password.png
easygraphics.dialog.get_yes_or_no(question: str = 'Answer this question', title: str = 'Title') → Optional[bool]

让用户选择yes或no。

参数:
  • question – 要显示的问题
  • title – 窗口标题
返回:

选yes返回True,选No返回False,选Cancel返回None。

>>> from easygraphics.dialog import *
>>> choice = get_yes_or_no()
../_images/yes_no_question.png
easygraphics.dialog.show_image_dialog(image: PyQt5.QtGui.QImage, title: str = 'Title')

在窗口中显示图片。

参数:
  • image – 要显示的图片
  • title – 对话框窗口标题
easygraphics.dialog.show_table(datas: Sequence[T_co], fields: Sequence[str] = None, field_names: Sequence[str] = None, title: str = 'Title', width: int = 720, height: int = 450, enable_sorting=False)

以表格形式显示一组对象。

>>> from easygraphics.dialog import *
>>> class Person:
>>>     def __init__(self,name,age,sex):
>>>         self.name=name
>>>         self.age = age
>>>         self.sex = sex
>>> objs = [Person("Jack", 22, "M"), Person("Micheal", 40, "F"), Person("David", 24, "M")]
>>> show_objects(title="peoples",datas=objs,fields=["name","age","sex"],field_names=["NAME","AGE","SEX"])
../_images/show_objects.png
参数:
  • datas – 要显示的对象列表
  • fields – 要显示的对象属性列表
  • field_names – 显示在表头的对象属性名称
  • title – 对话框窗口标题
  • width – 对话框窗口宽度
  • height – 对话框窗口高度
  • enable_sorting – if data can be sorted by clicking the column name
easygraphics.dialog.show_lists_table(*args, column_names: List[str] = None, title: str = 'Title', width: int = 720, height: int = 450)

以表格形式显示多个列表。

>>> from easygraphics.dialog import *
>>> x=[1,2,3,4]
>>> y=["hah","jack","marry"]
>>> show_lists_table(x,y,column_names=['x','y'])
.. image:: ../../docs/images/dialogs/show_lists_table.png
参数:
  • args – 要显示的列表
  • column_names – 显示在表头的各字段名(列表名)
  • title – 对话框窗口标题
  • width – 对话框窗口宽度
  • height – 对话框窗口高度
easygraphics.dialog.show_html(title: str = 'Title', text: str = '', width: int = 720, height: int = 450)

在窗口中显示html代码。

参数:
  • title – 对话框标题
  • text – 要显示在对话框中的内容
  • width – 对话框窗口宽度
  • height – 对话框窗口高度
>>> from easygraphics.dialog import *
>>> show_html()
apis\../../docs/images/dialogs/show_html.png
class easygraphics.dialog.FileFilter
AllFiles = 'All Files (*.*)'
CSVFiles = 'CSV Files (*.csv)'
ImageFiles = 'Image Files (*.png *.gif *.jpg *.webp *.bmp)'
PythonFiles = 'Python Files (*.py)'
TxtFiles = 'Text Files (*.txt)'