添加自定义按钮的例子:
#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 深圳