窗口基础

前言

这是之后学习窗口的基础,需要打好地基建高楼。

类型

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_())

创建主窗口展示

QMainWindow例子
提示信息显示5秒后消失。

主窗口居中显示

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类。
这是QWidget的几何结构,图片来自于《PyQt5快速开发与实战》。
QWidget
这些成员函数分为三类。
QWidget直接提供的成员函数:x()、y()获得窗口左上角的坐标,width()、height()获得客户端的宽度和高度。
QWidget的geometry()提供的成员函数:x()、y()获得客户区左上角的坐标,width()、height()获得客户端的宽度和高度。
QWidget的frameGeometry()提供的成员函数:x(),y()获得窗口左上角的坐标,width()、height()获得包含客户区、标题栏和边在内的整个窗口的宽度和高度。

1.QWidget不包括边框的常用函数

(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)

2.QWidget包括边框的常用函数

这里没有设置边框大小的函数,边框大小是通过上面不包含边框函数的设置,就可以设置包含边框的大小。
(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_())  

后记

好了是时候等到明天了,这些笔记必须赶快整理。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值