IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]16.2 最简单界面程序(2)

    caimouse发表于 2016-07-13 08:42:00
    love 0

    添加自定义按钮的例子:

    #python 3.4
    import sys
     
    import PySide
    from PySide.QtGui import QApplication
    from PySide.QtGui import QMessageBox
     
     
    # 创建应用程序对象
    app = QApplication(sys.argv)
    # 创建简单的对话框
    msgBox = QMessageBox()
    connectButton = msgBox.addButton("连接", QMessageBox.ActionRole)
    abortButton = msgBox.addButton("取消", QMessageBox.ActionRole)
    msgBox.exec_()
     
    if msgBox.clickedButton() == connectButton:
        # connect
        print('connect')
    elif msgBox.clickedButton() == abortButton:
        # abort
        print('abort')


    结果输出如下:

    在这个例子里,使用addButton()函数添加自定义消息,第一个参数是按钮显示的文本,第二个参数是按钮的作用,枚举类型ButtonRole。可以是QMessageBox::AcceptRole,QMessageBox::RejectRole,  QMessageBox::ActionRole,QMessageBox::YesRole等等。另外ButtonRole和按钮是想对应的。如Yes按钮和AcceptRole对应,Open,Save按钮也和AcceptRole对应;Cancel按钮和RejectRole对应等,这在帮助文档中有一个专门的列表来对应。

     

    创建一个对话框的应用程序例子:

    #python 3.4
    import sys
    from PySide.QtCore import *
    from PySide.QtGui import *
     
    class ExampleApp(QDialog):
        ''' 创建对话框的例子'''
        def __init__(self):
            # 创建Qt应用程序实例
            self.qt_app = QApplication(sys.argv)
           
            # 调用基类构造函数
            QDialog.__init__(self, None)
     
            # 设置窗口
            self.setWindowTitle('PySide Example')
            self.setMinimumSize(300, 200)
     
        def run(self):
            ''' 运行程序,并显示主窗口'''
            self.show()
            self.qt_app.exec_()
     
    app = ExampleApp()
    app.run()


    输出结果如下:

    在这个例子里,主要创建一个对话框为基础的应用程序。导入基本需要的库之后,定义了一个类ExampleApp,这个类继承类QDialog,它是对话框程序的基类。接着在构造函数里创建类QApplication的对象,调用对话框类QDialog的构造函数,调用函数setWindowTitle设置显示窗口的标题,调用函数setMinimumSize设置窗口最小的大小;在函数run里调用show函数把创建的对话框显示出来,然后调用应用程序事件处理函数exec_()。

    类QDialog

    PySide.QtGui.QDialog类是一个对话框窗口的基类。对话框窗口是一种与用户进行交互的界面,可以支持有模式或无模式方式显示。对话框类也带PySide.QtGui.QSizeGrip的功能,就是在窗口右下角可以拉伸调整窗口的大小。对话框可以通过函数setParent()来设置父窗口。

    当显示为模式对话框时,直到本对话框关闭为止,否则不能在其它任何窗口进行输入。比如打开一个文件时,一般会采用这方式显示,直接选择文件,或者取消选择文件。要让对话框显示方式为模态对话框,就使用函数exec()来执行。

    当显示为无模态对话框时,需要使用函数show()来显示。

    当窗口想设置默认按钮时,可以使用函数QPushButton.setDefault() , QPushButton.isDefault() 和 QPushButton.autoDefault()来设置。

     

    添加一个列表框的例子:

    #python 3.4
    import sys
    from PySide.QtCore import *
    from PySide.QtGui import *
     
    class ExampleApp(QDialog):
        ''' 创建对话框的例子'''
        def __init__(self):
            # 创建Qt应用程序实例
            self.qt_app = QApplication(sys.argv)
           
            # 调用基类构造函数
            QDialog.__init__(self, None)
     
            # 设置窗口
            self.setWindowTitle('PySide Example')
            self.setMinimumSize(300, 200)
     
            #添加一个垂直布局组件
            self.vbox = QVBoxLayout()
            #添加一个组合框
            self.greeting = QComboBox(self)
            self.vbox.addWidget(self.greeting)
            #往组合框里添加内容
            self.greetings = ['测试', 'blog', 'blog.csdn.net/caimouse']
            list(map(self.greeting.addItem, self.greetings))
                    
        def run(self):
            ''' 运行程序,并显示主窗口'''
            self.show()
            self.qt_app.exec_()
     
    app = ExampleApp()
    app.run()


    输出结果如下:

    在这个例子里,主要基于前面对话框的例子,添加了一个列表框显示。为了后面的组件在界面上布局,创建了一个垂直布局组件QVBoxLayout,创建一个列表框QComboBox,然后通过函数addWidget把列表框添加到窗口布局界面里,最后往列表框里添加选择列表内容,通过函数list和map来实现:

    list(map(self.greeting.addItem, self.greetings))

    在这句语句里,map()函数返回一个迭代子,需要使用list()来遍历每一个元素,才可以把元素添加到列表里。

     

    添加一行输入框的例子:

    #python 3.4
    import sys
    from PySide.QtCore import *
    from PySide.QtGui import *
     
    class ExampleApp(QDialog):
        ''' 创建对话框的例子'''
        def __init__(self):
            # 创建Qt应用程序实例
            self.qt_app = QApplication(sys.argv)
           
            # 调用基类构造函数
            QDialog.__init__(self, None)
     
            # 设置窗口
            self.setWindowTitle('PySide Example')
            self.setMinimumSize(300, 200)
     
            #添加一个垂直布局组件
            self.vbox = QVBoxLayout()
            #添加一个组合框
            self.greeting = QComboBox(self)
            self.vbox.addWidget(self.greeting)
            #往组合框里添加内容
            self.greetings = ['测试', 'blog', 'blog.csdn.net/caimouse']
            list(map(self.greeting.addItem, self.greetings))
     
            #添加一行输入框
            self.recipient = QLineEdit('world', self)
            self.vbox.addWidget(self.recipient)
            self.vbox.addStretch(100)
            self.setLayout(self.vbox)
            
        def run(self):
            ''' 运行程序,并显示主窗口'''
            self.show()
            self.qt_app.exec_()
     
    app = ExampleApp()
    app.run()


    结果输出如下:

    在这个例子里,继续在前面的例子里添加一行输入框,它就是QLineEdit,这个一行编辑框主要用来显示或输入简单的内容。创建一行输入框之后,调用函数addWidget来添加布局组件里,然后调用布局函数addStretch来设置拉伸布局,不使用平均分配布局。当然还是需要把这个布局设置到对话框窗口里才有作用,所以需要调用对话框setLayout函数。

     

    添加按钮响应的例子:

    #python 3.4
    import sys
    from PySide.QtCore import *
    from PySide.QtGui import *
     
    class ExampleApp(QDialog):
        ''' 创建对话框的例子'''
        def __init__(self):
            # 创建Qt应用程序实例
            self.qt_app = QApplication(sys.argv)
           
            # 调用基类构造函数
            QDialog.__init__(self, None)
     
            # 设置窗口
            self.setWindowTitle('PySide Example')
            self.setMinimumSize(300, 200)
     
            #添加一个垂直布局组件
            self.vbox = QVBoxLayout()
            #添加一个组合框
            self.greeting = QComboBox(self)
            self.vbox.addWidget(self.greeting)
            #往组合框里添加内容
            self.greetings = ['测试', 'blog', 'blog.csdn.net/caimouse']
            list(map(self.greeting.addItem, self.greetings))
     
            #添加一行输入框
            self.recipient = QLineEdit('world', self)
            self.vbox.addWidget(self.recipient)
            #强制按钮在布局最底部
            self.vbox.addStretch(100)
     
            #添加按钮
            self.go_button = QPushButton('&Go')
            #绑定按钮的响应函数
            self.go_button.clicked.connect(self.print_out)
            self.vbox.addWidget(self.go_button)
            
            #设置窗口布局
            self.setLayout(self.vbox)
            
        def run(self):
            ''' 运行程序,并显示主窗口'''
            self.show()
            self.qt_app.exec_()
        def print_out(self):
            print(self.recipient.displayText())
             
    app = ExampleApp()
    app.run()


    输出结果如下:

    在这个例子里,主要增加了按钮QPushButton,先调用它的构造函数构造一个按钮对象,接着设置按钮的响应函数,它是通过使用clicked.connect(self.print_out)方式绑定到按下响应函数print_out的。最后通过函数addWidget添加布局组件里,由于上面addStretch函数添加与后面一个按钮的拉伸间隔,强制这个按钮显示在最底部。

    类QPushButton是一个命令按钮类,典型就是在按钮上显示文本,然后用户可以按下这个按钮,就可以触发事件响应。

     

    定时器的例子:

    #python 3.4
    import sys
    from PySide.QtCore import *
    from PySide.QtGui import *
     
    class ExampleApp(QDialog):
        ''' 创建对话框的例子'''
        def __init__(self):
            # 创建Qt应用程序实例
            self.qt_app = QApplication(sys.argv)
           
            # 调用基类构造函数
            QDialog.__init__(self, None)
     
            # 设置窗口
            self.setWindowTitle('PySide Example')
            self.setMinimumSize(300, 200)
     
            #添加一个垂直布局组件
            self.vbox = QVBoxLayout()
            #添加一个组合框
            self.greeting = QComboBox(self)
            self.vbox.addWidget(self.greeting)
            #往组合框里添加内容
            self.greetings = ['测试', 'blog', 'blog.csdn.net/caimouse']
            list(map(self.greeting.addItem, self.greetings))
     
            #添加一行输入框
            self.recipient = QLineEdit('world', self)
            self.vbox.addWidget(self.recipient)
            #强制按钮在布局最底部
            self.vbox.addStretch(100)
     
            #添加按钮
            self.go_button = QPushButton('&Go')
            #绑定按钮的响应函数
            self.go_button.clicked.connect(self.print_out)
            self.vbox.addWidget(self.go_button)
            
            #设置窗口布局
            self.setLayout(self.vbox)
     
            #定时器
            timer = QTimer(self)
            self.connect(timer, SIGNAL("timeout()"), self.update)
            timer.start(5000)
            self.timecount = 0
            
        def run(self):
            ''' 运行程序,并显示主窗口'''
            self.show()
            self.qt_app.exec_()
        def print_out(self):
            print(self.recipient.displayText())
        def  update(self):
            print('timer')
            self.recipient.setText('{0}'.format(self.timecount))
            self.timecount += 1
    app = ExampleApp()
    app.run()


    在这个例子里,主要增加了定时器QTimer,它先创建定时器对象timer,然后通过语句:

    self.connect(timer, SIGNAL("timeout()"), self.update)

    来连接定时器事件与响应函数update()的关联,使用函数start()来设置定时器的定时时间,这里设置为5秒,它的单位是毫秒。在响应函数update()里主要就是把统计的定时器次数显示到界面的编辑框里。


    蔡军生 QQ:9073204 深圳



沪ICP备19023445号-2号
友情链接