实战wxPython:022 - 输入对话框

在GUI程序中,常常需要一种简单的对话框来提供一个单行的信息输入来提供一些简短的文本输入,比如通常在程序开始的时候要求用户名或者密码的时候,或者作为一个数据输入框等。为此wxPython提供了一个简单类型的对话框类wx.TextEntryDialog可以快速方便地实现简短文本输入。根据密码输入要求,在wxPython在wx.TextEntryDialog之上导出类wx.PasswordEntryDialog来专门实现密码输入。 wx.NumberEntryDialog对话框则专门用于数字输入。

一、文本输入对话框wx.TextEntryDialog

文本输入对话框wx.TextEntryDialog提供一个单行文本输入对话框,其构造函数原型为:

wx.TextEntryDialog(parent,message,caption,defaultvalue,style,pos)

参数:

parent:父窗口句柄;

message:提示信息,一般提示文本框该输入什么类型的信息;

caption: 标题文字;

defaultvalue: 默认值;

style:窗口样式

pos:窗口显示位置

wx.TextEntryDialog常用方法有:

  • ForceUpper(self):将输入到对话框使用的文本控件中的所有文本转换为大写。调用此方法可确保输入到对话框使用的文本控件中的所有文本都被动态转换为大写。如果文本控件不为空,则其现有内容也转换为大写。该方法为wxPython4.1/wxWidgets-3.1.0新版功能。
  • GetValue(self):如果用户按了wx.OK,则返回用户输入的文本。如果用户按了取消键,则返回原始值。
  • SetMaxLength(self, len):设置用户可以在此对话框中输入的最大字符数。
  • SetValue(self, value):设置默认文本值。
  • ShowModal(self): 显示对话框,如果点击了wx.OK按钮则返回wx.ID_OK,否则返回wx.ID_CANCEL。

 图1:wx.TextEntryDialog类继承关系

二、wx.TextEntryDialog演示

下面的代码演示如何使用wx.TextEntryDialog:

#文本输入对话框(TextEntryDialog)

import wx

class SampleTextEntryDialog(wx.Frame):

    def __init__(self, *args, **kw):
        super(SampleTextEntryDialog, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        #设置标题
        self.SetTitle("实战wxPython: 文本输入对话框")
        #设置窗口尺寸
        self.SetSize(480, 360)

        panel = wx.Panel(self)
        
        # 创建输入对话框
        dlg = wx.TextEntryDialog(self, "你最喜欢的编程语言是?", "TextEntryDialog","Python")
        if dlg.ShowModal() == wx.ID_OK:
            lang = "我最喜欢的编程语言是:" + dlg.GetValue()
        else:
            lang = "我不会编程"

        dlg.Destroy()

        #用一个静态文本框显示输入的内容
        wx.StaticText(panel, -1, lang, pos=(10, 10))

        self.Centre()

def main():
    app = wx.App()
    sample = SampleTextEntryDialog(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

运行上述代码,首先会弹出一个文本输入对话框(如图2):

 图2:wx.TextEntryDialog演示

在文本框中输入”Python”, 然后点击”确认”按钮,最后在主窗口上将显示信息“我最喜欢的编程语言是:Python”, 如图3所示。

 图3:显示wx.TextEntryDialog的输入信息

三、wx.GetTextFromUser

调用wx.GetTextFromUser全局方法,可以弹出一个文本输入对话框,其原型为:

wx.GetTextFromUser(message, caption, defaultValue, parent, x, y, centre)

参数:

message: 对话框中显示的信息,该信息可以包含换行符。

caption: 对话框标题。

defaultValue: 默认文本。

parent: 父窗口。

x: 对话框水平方向位置。

y: 对话框垂直方向位置。

centre: 为真是对话框位于中央,其他情况左对齐。

调用方法:

text = wx.GetTextFromUser("你最喜欢的编程语言是?", "编程语言调查","Python")

四、密码输入对话框wx. PasswordEntryDialog

为了密码输入的特殊性(在输入时不显示输入的字符), wxPython提供了密码输入对话框类wx.PasswordEntryDialog来实现对密码输入要求的功能。

Wx.PasswordEntryDialog的构造函数原型和基本方法同wx.TextEntryDialog。

 图4:wx.PasswordEntryDialog类继承关系

下面的代码演示了如何调用wx.PasswordEntryDialog:

#密码输入对话框(PasswordEntryDialog)

import wx

class SamplePasswordEntryDialog(wx.Frame):

    def __init__(self, *args, **kw):
        super(SamplePasswordEntryDialog, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        #设置标题
        self.SetTitle("实战wxPython: 密码输入对话框")
        #设置窗口尺寸
        self.SetSize(480, 360)

        panel = wx.Panel(self)

        # 创建输入对话框
        dlg = wx.PasswordEntryDialog(self, "请输入密码", "密码输入","123456")
        if dlg.ShowModal() == wx.ID_OK:
            lang = "当前密码是:" + dlg.GetValue()
        else:
            lang = "未输入密码"

        dlg.Destroy()

        #用一个静态文本框显示输入的内容
        wx.StaticText(panel, -1, lang, pos=(10, 10))     

        self.Centre()

def main():
    app = wx.App()
    sample = SamplePasswordEntryDialog(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

运行上述代码,首先会弹出一个文本输入对话框(如图5):

 图5:wx.PasswordEntryDialog演示

输入密码后,点击”确认”按钮,将在主窗口显示刚才输入的密码信息,如图6所示:

 图6:显示wx.PasswordEntryDialog输入的密码信息

六、wx.GetPasswordFromUser

调用wx.GetPasswordFromUser全局方法,可以弹出一个文本输入对话框,其原型为:

wx. GetPasswordFromUser (message, caption, defaultValue, parent)

参数:

message: 对话框中显示的信息,该信息可以包含换行符。

caption: 对话框标题。

defaultValue: 默认文本。

parent: 父窗口。

调用方法:

password = wx.GetPasswordFromUser("请输入密码", "密码输入","123456")

七、数字输入对话框wx.NumberEntryDialog

wx.NumberEntryDialog提示用户输入一个固定范围内的数字,这个对话框包含一个spin控件因此,用户既可以手动输入数字,也可以通过鼠标点击spin按钮来调整数字的值,这个对话框是wxWidgets自己实现的,因此在各个平台上的表现都是相似的。

wx.NumberEntryDialog构造函数原型:

wx.NumberEntryDialog(parent, message, prompt, caption, value, min, max, pos)

参数:

parent: 父窗口。

message: 对话框中显示的信息,该信息可以包含换行符。

prompt: 输入框前的提示信息。

caption: 对话框标题。

value: 默认值。

min: 最小值。

max: 最大值。

pos:对话框显示的位置。

wx.NumberEntryDialog 常用方法:

  • GetValue(self):如果用户按了确认键(wx.OK),则返回用户输入的值。如果用户按了取消键,则返回原始值。

 图7. wx.NumberEntryDialog类继承关系

八、wx.GetNumberFromUser

调用wx.GetNumberFromUser全局方法,可以弹出一个文本输入对话框,其原型为:

wx.GetNumberFromUser(message, prompt, caption, value, min, max, parent, pos)

参数:

message: 对话框中显示的信息,该信息可以包含换行符。

prompt: 输入框前的提示信息。

caption: 对话框标题。

value: 默认值。

min: 最小值,默认值为0。

max: 最大值,默认值为100。

parent: 父窗口,默认值为None。

pos:对话框显示的位置,默认值为DefaultPosition。

调用方法为:

value = wx.GetNumberFromUser("请输入一组数字,范围是0-100", "当前值","wx. GetNumberFromUser演示", 10)

如果用户按了确认键(wx.OK),则返回用户输入的值。如果用户按了取消键,则返回原始值。

九、 wx.NumberEntryDialog演示

以下代码演示了如何调用wx.NumberEntryDialog。

#!/usr/bin/env python
"""
实战 wxPython之: 对话框
作者:     wu wintel
email:     wuwintop@foxmail.com

"""

#数字输入对话框(NumberEntryDialog)

import wx

class SampleNumberEntryDialog(wx.Frame):

    def __init__(self, *args, **kw):
        super(SampleNumberEntryDialog, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        #设置标题
        self.SetTitle("实战wxPython: 数字输入对话框")
        #设置窗口尺寸
        self.SetSize(480, 360)

        panel = wx.Panel(self)

        # 创建输入对话框
        dlg = wx.NumberEntryDialog(self, "请输入一组数字,范围是0-10000", "当前值","wx.NumberEntryDialog演示", 100, 0, 10000)
        if dlg.ShowModal() == wx.ID_OK:
            lang = "输入的数字是:" + str(dlg.GetValue())
        else:
            lang = "输入取消"

        dlg.Destroy()

        #用一个静态文本框显示输入的内容
        wx.StaticText(panel, -1, lang, pos=(10, 10))     

        self.Centre()

def main():
    app = wx.App()
    sample = SampleNumberEntryDialog(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

运行上面的代码,输入数字,点击”确认”按钮,将在主窗口显示刚才输入的数字:

 图8. wx.NumberEntryDialog演示

十、本文知识点

  • 了解和使用wx.TextEntryDialog。
  • 了解和使用wx.PasswordDialog。
  • 调用wx.GetTextFromUser全局方法。
  • 调用wx.GetPasswordFromUser全局方法。
  • 了解和使用wx.NumberEntryDialog。
  • 调用wx.GetNumberFromUser全局方法。

前一篇:实战wxPython:021 - 对话框Dialog

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
“ class MyDialog32(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"聘请客服人员", pos=wx.DefaultPosition, size=wx.Size(400, 300), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "请输入菜品名称:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(160, 20), size=(120, 25)) wx.StaticText(self.panel, -1, "请输入客服人员编号:", (20, 80)) self.t2 = wx.TextCtrl(self.panel, pos=(160, 80), size=(120, 25)) wx.StaticText(self.panel, -1, "请输入客服人员姓名:", (20, 140)) self.t3 = wx.TextCtrl(self.panel, pos=(160, 140), size=(120, 25)) def OnClick(self, e): dialog32 = MyDialog32(None) btn = wx.Button(parent=dialog32.panel, label="聘请", pos=(20, 200), size=(100, 45)) btn.Bind(wx.EVT_BUTTON, dialog32.insert) dialog32.ShowModal() def insert(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='wm', charset='utf8') cursor = conn.cursor() shop_name = self.t1.GetValue().encode('utf8') # 注意GetValue()获取的是unicode编码, server_id = self.t2.GetValue().encode('utf8') # 你使用的#coding=utf8,那就对获取的数据.encode('utf8') server_name = self.t3.GetValue().encode('utf8') data = (server_id, server_name, shop_name) try: sql = "insert into server values(%s,%s,%s)" cursor.execute(sql, data) conn.commit() dial = wx.MessageDialog(None, '成功聘请客服!', '结果', wx.YES_NO) # 创建一个带按钮的对话框, 语法是(self, 内容, 标题, ID) dial.ShowModal() # 显示对话框 except: conn.rollback() finally: cursor.close() conn.close()”逐行解释代码
06-07
这段代码是一个使用 wxPython 构建的 GUI 程序,主要用于聘请客服人员。下面是每行代码的解释: ```python class MyDialog32(wx.Dialog): ``` 定义一个名为 MyDialog32 的类,继承自 wx.Dialog。 ```python def __init__(self, parent): ``` 定义 MyDialog32 类的初始化方法,接受一个参数 parent。 ```python wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"聘请客服人员", pos=wx.DefaultPosition, size=wx.Size(400, 300), style=wx.DEFAULT_DIALOG_STYLE) ``` 调用 wx.Dialog 的初始化方法,设置对话框的 id、标题、位置、大小和样式。 ```python self.Center() ``` 将对话框居中显示。 ```python self.panel = wx.Panel(self) ``` 创建一个名为 panel 的 wx.Panel 对象,并将其设置为 MyDialog32 对象的子窗口。 ```python self.panel.SetBackgroundColour('white') ``` 将 panel 的背景色设置为白色。 ```python wx.StaticText(self.panel, -1, "请输入菜品名称:", (20, 20)) ``` 在 panel 上创建一个静态文本控件,显示 "请输入菜品名称:",并指定其位置为 (20, 20)。 ```python self.t1 = wx.TextCtrl(self.panel, pos=(160, 20), size=(120, 25)) ``` 在 panel 上创建一个文本框控件,用于输入菜品名称,指定其位置为 (160, 20),大小为 (120, 25),并将其赋值给 MyDialog32 对象的 t1 属性。 ```python wx.StaticText(self.panel, -1, "请输入客服人员编号:", (20, 80)) ``` 在 panel 上创建一个静态文本控件,显示 "请输入客服人员编号:",并指定其位置为 (20, 80)。 ```python self.t2 = wx.TextCtrl(self.panel, pos=(160, 80), size=(120, 25)) ``` 在 panel 上创建一个文本框控件,用于输入客服人员编号,指定其位置为 (160, 80),大小为 (120, 25),并将其赋值给 MyDialog32 对象的 t2 属性。 ```python wx.StaticText(self.panel, -1, "请输入客服人员姓名:", (20, 140)) ``` 在 panel 上创建一个静态文本控件,显示 "请输入客服人员姓名:",并指定其位置为 (20, 140)。 ```python self.t3 = wx.TextCtrl(self.panel, pos=(160, 140), size=(120, 25)) ``` 在 panel 上创建一个文本框控件,用于输入客服人员姓名,指定其位置为 (160, 140),大小为 (120, 25),并将其赋值给 MyDialog32 对象的 t3 属性。 ```python def OnClick(self, e): ``` 定义一个名为 OnClick 的方法,接受一个参数 e。 ```python dialog32 = MyDialog32(None) ``` 创建一个 MyDialog32 对象。 ```python btn = wx.Button(parent=dialog32.panel, label="聘请", pos=(20, 200), size=(100, 45)) ``` 在 MyDialog32 对象的 panel 上创建一个按钮控件,显示 "聘请",并指定其位置为 (20, 200),大小为 (100, 45),并将其赋值给 btn 变量。 ```python btn.Bind(wx.EVT_BUTTON, dialog32.insert) ``` 为按钮控件绑定一个单击事件,当按钮被单击时,调用 MyDialog32 对象的 insert 方法。 ```python dialog32.ShowModal() ``` 以模态方式显示 MyDialog32 对象。 ```python def insert(self, e): ``` 定义一个名为 insert 的方法,接受一个参数 e。 ```python conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='wm', charset='utf8') ``` 创建一个 MySQL 数据库连接,指定数据库的主机、端口、用户名、密码、数据库名和字符集。 ```python cursor = conn.cursor() ``` 创建一个游标对象,用于执行 SQL 语句。 ```python shop_name = self.t1.GetValue().encode('utf8') ``` 获取 t1 文本框控件中输入的文本,将其编码为 utf8 格式,并将其赋值给变量 shop_name。 ```python server_id = self.t2.GetValue().encode('utf8') ``` 获取 t2 文本框控件中输入的文本,将其编码为 utf8 格式,并将其赋值给变量 server_id。 ```python server_name = self.t3.GetValue().encode('utf8') ``` 获取 t3 文本框控件中输入的文本,将其编码为 utf8 格式,并将其赋值给变量 server_name。 ```python data = (server_id, server_name, shop_name) ``` 将 server_id、server_name 和 shop_name 组成一个元组,并将其赋值给变量 data。 ```python try: sql = "insert into server values(%s,%s,%s)" cursor.execute(sql, data) conn.commit() dial = wx.MessageDialog(None, '成功聘请客服!', '结果', wx.YES_NO) dial.ShowModal() except: conn.rollback() finally: cursor.close() conn.close() ``` 执行 SQL 语句,将数据插入到数据库中。如果插入成功,弹出一个对话框,显示 "成功聘请客服!"。如果插入失败,回滚事务。无论插入是否成功,关闭游标对象和数据库连接对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值