这是之后学习窗口的基础,需要打好地基建高楼。
QMainWindow、QWidget、QDialog三个类都是用来创建窗口的,可以直接使用,也可以继承后再使用。
QMainWindow窗口可以包含菜单栏、工具栏、状态栏和标题栏等,是最常见的窗口形式,也可以说是GUI程序的主窗口。
QWidget是对话框窗口的基类。对话框主要用来执行短期任务,或者与用户进行互动。
如果是主窗口,就使用QMainWindow类;如果是对话框,就使用QDialog类;如果不确定,或者有可能作为顶层窗口,也有可能嵌入到其他窗口中,那么就使用QWidget类。(看样子它最灵活。话说既然这么厉害,要前俩干嘛)
QMainWindow继承自QWidget类,拥有它的所以派生方法和属性。
方法 | 描述 |
---|---|
addToolBar() | 添加工具栏 |
centralWidget() | 返回窗口中心的一个控件,未设置时返回NULL |
menuBar() | 返回主窗口的菜单栏 |
setCentralWidget() | 设置窗口中心的控件 |
setStatusBar() | 添加状态栏 |
statusBar() | 获得状态栏对象后,调用状态栏对象的showMessage(message,int timeout = 0)方法,显示状态栏信息。其中第一个参数是要显示的状态栏信息;第二个参数是信息停留的时间,单位是毫秒,默认是0,表示一直显示状态栏信息 |
import sys
from PyQt5.QtWidgets import QMainWindow , QApplication
from PyQt5.QtGui import QIcon
class MainWidget(QMainWindow):
def __init__(self,parent=None):
super(MainWidget,self).__init__(parent)
# 设置主窗体标签
self.setWindowTitle("QMainWindow 例子") #设置窗口标题
self.resize(400, 200)
self.status = self.statusBar()
self.status.showMessage("这是状态栏提示",5000)
if __name__ == "__main__":
app = QApplication(sys.argv)
app.setWindowIcon(QIcon("./images/cartoon1.ico"))#设置窗口图标
main = MainWidget()
main.show()
sys.exit(app.exec_())
from PyQt5.QtWidgets import QDesktopWidget, QApplication ,QMainWindow
import sys
class Winform( QMainWindow):
def __init__(self, parent=None):
super( Winform, self).__init__(parent)
self.setWindowTitle('主窗口放在屏幕中间例子')
self.resize(370, 250) #设置QWidget窗口的大小,单位为px
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 = Winform()
win.show()
sys.exit(app.exec_())
from PyQt5.QtWidgets import QMainWindow,QHBoxLayout, QPushButton , QApplication, QWidget
import sys
class WinForm(QMainWindow):
def __init__(self, parent=None):
super(WinForm, self).__init__(parent)
self.resize(330, 100)
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 是发送信号的对象,此处发送信号的对象是button1按钮
sender = self.sender()
print( sender.text() + ' 被按下了' ) #按钮的text()方法可以获取按钮上面的文本
qApp = QApplication.instance()
qApp.quit()
if __name__ == "__main__":
app = QApplication(sys.argv)
form = WinForm()
form.show()
sys.exit(app.exec_())
基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口和控件都直接或间接继承自QWidget类。
这是QWidget的几何结构,图片来自于《PyQt5快速开发与实战》。
这些成员函数分为三类。
QWidget直接提供的成员函数:x()、y()获得窗口左上角的坐标,width()、height()获得客户端的宽度和高度。
QWidget的geometry()提供的成员函数:x()、y()获得客户区左上角的坐标,width()、height()获得客户端的宽度和高度。
QWidget的frameGeometry()提供的成员函数:x(),y()获得窗口左上角的坐标,width()、height()获得包含客户区、标题栏和边在内的整个窗口的宽度和高度。
(1)改变客户区的面积
QWidget.resize(width,height)
Qwidget.resize(QSize)
(2)获得客户区的大小
QWidget.size()
(3)获得客户区的宽度和高度
QWidget.width()
QWidget.height()
(4)设置客户区的宽度和高度
#下面两个函数,固定后鼠标不能改变固定值
QWidget.setFixedWidth(int width)
QWidget.setFixedHeight(int height)
#下面两个函数,固定后鼠标不能改变大小
QWidget.setFixedSize(QSize size)
QWidget.setFixedSize(int width,int height)
#下面两个函数,固定后鼠标可以改变大小
QWidget.setGeometry(int 下,int y,int width,int height)
QWidget.setGeometry(QRect rect)
这里没有设置边框大小的函数,边框大小是通过上面不包含边框函数的设置,就可以设置包含边框的大小。
(1)获得窗口的大小和位置
QWidget.frameGeometry()
(2)设置窗口的位置
QWidget.move(int x,int y)
QWidget.move(QPoint point)
(3)获得窗口左上角的坐标
QWidget.pos()
(4)设置客户区的宽度和高度
#下面两个函数,固定后鼠标不能改变固定值
QWidget.setFixedWidth(int width)
QWidget.setFixedHeight(int height)
#下面两个函数,固定后鼠标不能改变大小
QWidget.setFixedSize(QSize size)
QWidget.setFixedSize(int width,int height)
#下面两个函数,固定后鼠标可以改变大小
QWidget.setGeometry(int 下,int y,int width,int height)
QWidget.setGeometry(QRect rect)
from PyQt5.QtWidgets import QApplication ,QWidget ,QPushButton
import sys
app = QApplication(sys.argv)
widget = QWidget()
btn = QPushButton( widget )
btn.setText("Button")
#以QWidget左上角为(0, 0)点
btn.move(20, 20)
#不同操作系统可能对窗口最小宽度有规定,若设置宽度小于规定值,则会以规定值进行显示
widget.resize(300, 200)
#以屏幕左上角为(0, 0)点
widget.move(250, 200)
widget.setWindowTitle('PyQt坐标系统例子')
widget.show()
print("#1 QWidget")
print("widget.x()=%d" % widget.x() )
print("widget.y()=%d" % widget.y() )
print("widget.width()=%d" % widget.width() )
print("widget.height()=%d" % widget.height() )
print("#2 QWidget.geometry")
print("widget.geometry().x()=%d" % widget.geometry().x() )
print("widget.geometry().y()=%d" % widget.geometry().y() )
print("widget.geometry().width()=%d" % widget.geometry().width() )
print("widget.geometry().height()=%d" % widget.geometry().height() )
print("widget.size().width() =%d" % widget.size().width() )
print("widget.size().height() =%d" % widget.size().height() )
print("#3 QWidget.frameGeometry")
print("widget.frameGeometry().width()=%d" % widget.frameGeometry().width() )
print("widget.frameGeometry().height()=%d" % widget.frameGeometry().height() )
print("widget.pos().x()=%d" % widget.pos().x() )
print("widget.pos().y()=%d" % widget.pos().y() )
sys.exit(app.exec_())
好了是时候等到明天了,这些笔记必须赶快整理。