马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 我是python小白 于 2019-4-9 11:05 编辑
1.1QMianWindow
QMainWindow主窗口为用户提供应用程序框架,它有自己的布局,可以在布局中添加控件
。
1.1.1窗口类型
> QMainWindow、QWidget和QDialog三个类都是用类创建窗口的可以直接使用,也可以继承后使用。
QMianWindow窗口可以包含菜单栏、工具栏、状态栏、标题栏等,是最常用的窗口形式,也就是说是GUi程序的主窗口。
QDialog是对话框窗口的基类。对话框主要是用来执行短期任务,或者与用户互动,它可以是模态的,也可以是非模态的。
总结是:如果是主窗口,就使用QMainWindow类,如果是对话框就是用QDialog类如果不确定,或者可能嵌入到其他窗口中,那么就使用QWidget类
基类:被定义为包含所有实体共性的class类型,被称为“基类”,俗话说:基类(父类)
模态:模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。
1.1.2创建主窗口
> 如果一个窗口包含一个或多个窗口,那么这个窗口就是父窗口,被包含的窗口是子窗口。没有父窗口的窗口是顶层窗口,QMainWindow就是一个顶层窗口。
方法 | 描述 | addTooolBar() | 添加工具栏 | centralWidget() | 返回窗口中心的的一个控件,为设置时返回NULL | menuBar() | 返回主窗口的菜单栏 | seetCentralWidget() | 设置窗口中心的控件 | setStatusBar() | 设置状态栏 | statusBar() | 获得状态栏对象后,调用状态栏对象的showMessage(message,int timeout=0)方法,显示状态栏信息,其中第一参数是要显示的状态栏信息;第二个参数是需不需停留的时间,单位是毫秒,默认是0,表示一致显示状态栏信息。 |
注意:QMainWindow不能设置布局(使用setlayout()方法),因为它有自己的布局。
1.1.2.1创建主窗口代码:import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QIcon
class MainWindow(QMainWindow):
def __init__(self, parent = None):
super(MainWindow, self).__init__(parent)
self.resize(400, 200)
self.status = self.statusBar()
self.status.showMessage("这是状态栏提示", 5000)
self.setWindowTitle("PyQt MainWindow例子")
if __name__ =="__main__":
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
代码分析self.status.showMessage("这是状态栏提示",500)
> 使用QMainWindow类的statusBar()方法创建状态栏,然后使用showMessage()方法将提示信息显示在状态栏中,提示的显示时间是5秒,5秒后状态提示信息消失。
> 在自定义的窗口类MainWindow中,继承了主窗口QMainWindow类所有的属性和方法,然后使用父窗口QMainWindow的构造函数Super()初始窗口,在设置窗口标题,然后通过消息循环显示窗口,状态栏可以直接由statusBar()产生,由showMessage()来显示信息。
> 构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,就是python的__init__()魔法方法。
1.1.3将主窗口放在屏幕中间
代码:from PyQt5.QtWidgets import QDesktopWidget, QApplication, QMainWindow
import sys
class winFrom(QMainWindow):
def __init__(self,parent = None):
super(winFrom, self).__init__(parent)
self.setWindowTitle("主窗口放在屏幕中间的例子")
self.resize(370, 250)
self.center()
def center(self):
screen = QDesktopWidget().screenGeometry()
size = self.geometry()
self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = winFrom()
win.show()
sys.exit(app.exec_())
代码分析:
> 该行语句用来设置Qwindget窗口的大小,宽度为370像素,高度为250像素。
screen = QDesktopWidget().screenGeometry()
该行语句用来计算显示屏幕的大小:(sereen.width()*screen.height()),其中QDesktopWidget().screenGeometry()来获取屏幕大小。
> 该行语句用来获取QWidget窗口的大小:(size.width()*size.heiget())
self.move((screen.width() - size.width()) / 2,(screen, height()) / 2)
---
1.1.4 关闭主窗口
import sys
from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QPushButton, QApplication, QWidget
class winFrom(QMainWindow):
def __init__(self, parent = None):
super(winFrom,self).__init__(parent)
self.setWindowTitle("关闭主窗口例子")
self.button1 = QPushButton('关闭主窗口')
self.button1.clicked.connect(self.onButtonClick)
layout = QHBoxLayout()
layout.addWidget(self.button1)
main_frame = QWidget()
main_frame.setLayout(layout)
self.setCentralWidget(main_frame)
def onButtonClick(self):
#sender是发送信号的对象
sender = self.sender()
print(sender.text() + '被按下了')
qApp = QApplication.instance()
qApp.quit()
if __name__ == "__main__":
app = QApplication(sys.argv)
win = winFrom()
win.show()
sys.exit(app.exec_())
注意使用connect括号里面别用括号
代码分析:
> 当单机“关闭窗口”按钮后,将关闭显示的窗口。通过以下代码将按钮的clicked信号与onButtonClick槽函数关联起来。 self.button1.clicked.connect(self.onButtonClick)
在槽函数onButtonClick()里获得QApplication类的对象,调用它的quit()函数来关闭窗口,在槽函数里还可以获得发送信号的对象。本例子中发送信号对象是按钮“关闭窗口”,然后通过按钮的Text()函数获得按钮的显示名称。
def onButtonClick(self):
#sender是发送信号的对象
sender = self.sender()
print(sender.text() + '被按下了')
qApp = QApplication.instance()
qApp.quit()
本笔记来源于《PyQt5快速开发与实战》
|