16.2 最简单界面程序(2)

添加自定义按钮的例子:

#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::AcceptRoleQMessageBox::RejectRole,  QMessageBox::ActionRoleQMessageBox::YesRole等等。另外ButtonRole和按钮是想对应的。如Yes按钮和AcceptRole对应,OpenSave按钮也和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把列表框添加到窗口布局界面里,最后往列表框里添加选择列表内容,通过函数listmap来实现:

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 深圳

跟老菜鸟学python

http://edu.csdn.net/course/detail/2592

你可能感兴趣的:(python,qt,界面,PyQt,milang)