PyQt5-基本窗口控件-QMainWindow

PyQt5-基本窗口控件-QMainWindow

一、QMainWindow

QMainWIndow是用 户提供一个应用程序框架,他有自己的布局,可以在布局中添加控件。在主窗口下添加控件,例如:工具栏,菜单栏,状态栏等;

QDialog是对话框窗口的基类;对话框主要用于执行短期任务,或者与用户进行互动;QDialog没有菜单栏,工具栏,状态栏等;

1.1创建主窗口:

常用方法如下:注意,QMainWindow不可以通过setLayout设置布局,因为他有自己的布局;

方法描述
addToolBar()添加工具栏
centralWidget()返回窗口中心的一个控件, 未设置时返回NULL
menuBar()返回主窗口的菜单栏
setCentralWidget()设置窗口中心的控件
setStatusBar()设置状态栏
statusBar()获得状态栏对象后, 调用状态栏对象的showMessage(messagem,int timeout=0)方法, 显示状态栏信息. 其中第一个参数是要显示的状态栏信息, 第二个参数是信息停留的时间, 单位是毫秒, 默认是0, 表示一直显示状态栏信

Demo: 

#创建一个主窗口
import sys
from PyQt5.QtWidgets import  QMainWindow,QApplication,QDesktopWidget,QPushButton

class MainWindow(QMainWindow):
    def __init__(self,parent=None):
        super(MainWindow,self).__init__(parent)
        self.resize(200,300)#设置大小
        self.status=self.statusBar() #创建状态栏
        self.setWindowTitle('窗体标题!')#窗体标题
        self.status.showMessage("状态栏",5000)#状态栏消息以及有效时间
        self.center()#设置布局
    def center(self):
        deskSize=QDesktopWidget().screenGeometry()#获取桌面窗体参数
        windowSize=self.geometry()#获取窗体本身参数
        self.move((deskSize.width()-windowSize.width())/2,(deskSize.height()-windowSize.height())/2)#居中设置
if __name__=="__main__":
    app=QApplication(sys.argv)
    window=MainWindow()
    window.show()
    sys.exit(app.exec_())

QWidget提供以下函数用于定位窗口坐标:(客户区,不包含边框的部分即客户区,我们正常操作的地方)

① x(),y()获得窗口左上角坐标,width(),height()获取客户区的宽度和高度;

②geometry()提供的成员函数,x() y()获得客户区左上角的坐标,width(),height()获得客户区的宽度和高度;

③frameGeometry()提供x(),y()获得窗口左上角坐标,width(),height()获得包含客户区,标题栏和边框在内的整个窗口的宽度和高度;

QWidge改变大小和位置常用函数(不包括边框):

①改变客户区面积

QWidget.resize(width,height) 或QWidget.resize(QSize)

注:QSize是PyQt5.QtCore中的类,该类代表一个矩形区域大小;

QWidget.resize(200,300)

QWidget.resize(QSize(200,300))

②获取客户区的宽度和高度

QWidget.width()

QWidget.height()

③获取客户区的大小

Qwidget.size()

④设置不可改高度或高度

QWidget.setFixedWidth(int width)# 宽度固定,高度可修改拉伸

QWidget.setFixedHeight(int height)#高度固定,宽度可修改拉伸

QWidget.setFixedSize(QSize size)#宽高固定

QWidget.setFixedSize(int widht,int height)#宽高固定

QWidget包含边框设置的函数

以下设置包含边框,包含大小和位置控制,是窗口在屏幕上显示的整个区域大小和位置;

①获取窗口的大小

QWidget.frameGeometry()

②设置窗口的位置

QWidget.move(int x,int y)

QWidget.move(Qpoint point)

③获取窗口左上角坐标

QWidget.pos()

Demo:

from PyQt5.QtWidgets import  QApplication,QMainWindow,QPushButton,QWidget
import sys
app=QApplication(sys.argv)
widget=QWidget()
btn=QPushButton(widget)
btn.setText("BTN")
widget.resize(300,400)#设置客户区大小
widget.move(100,50)#设置客户区左上角坐标位置
widget.setWindowTitle("PyQt坐标")
widget.show()
#打印数据
print("QWidget用户区坐标:x=%d,y=%d" %(widget.geometry().x(),widget.geometry().y()))#109,86
print("QWidget窗口坐标:x=%d ,y=%d" %(widget.x(), widget.y()))#100,50
print("QWidget窗口坐标:x=%d,y=%d" %(widget.frameGeometry().x(),widget.frameGeometry().y()))#100,50
print("QWidget客户区宽和高:width=%d,height=%d" %(widget.width(),widget.height()))#300,400
print("QWidget窗口宽和高:width=%d,height=%d" %(widget.frameGeometry().width(),widget.frameGeometry().height()))#318,445
sys.exit(app.exec_())

运行结果:

1.2 connection方法,讲槽函数关联起来;实现点击“”关闭窗口“”按钮,实现关闭显示的窗口;槽函数onBtnClickCloseWin如下,该方法中获取到QApplication类的对象,调用该对象的quit()方法来关闭窗口,在槽函数中可以获得发送信号的对象,下面程序中发送信号的对象是关闭按钮。

Demo:

#关闭一个主窗口
import sys
from PyQt5.QtWidgets import  QMainWindow,QApplication,QPushButton,QHBoxLayout,QWidget,QDesktopWidget


class MainWindow(QMainWindow):
    def __init__(self,parent=None):
        super(MainWindow, self).__init__(parent)
        #窗体设置
        self.resize(200,300)
        self.setWindowTitle("关闭窗口")
        self.center()

        #按钮设置
        self.btn = QPushButton("关闭")
        self.btn.clicked.connect(self.onBtnClickCloseWin)#单击事件

        #布局
        layout = QHBoxLayout()
        layout.addWidget(self.btn)
        widGet=QWidget()
        widGet.setLayout(layout)
        self.setCentralWidget(widGet)

    #窗体居中
    def center(self):
        self.size=QDesktopWidget().screenGeometry()
        self.resize=self.geometry()
        self.move((self.size.width()-self.resize.width())/2,(self.size.height()-self.resize.height())/2)

    def onBtnClickCloseWin(self):
        #发送消息对象
        sender=self.sender()
        appInstance=QApplication.instance()
        appInstance.quit()

if __name__=="__main__":
    app=QApplication(sys.argv)
    mainWindow=MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

总结:

1、app=QApplication(sys.argv)

每一个PyQt5程序都需要有一个QApplication对象,该类包含在QTWidgets模块中; sys.argv是一个命令行参数来列表;Python脚本可以从Shell中执行,例如双击.py文件,通过参数来选择启动脚本方式;

2、widget=QWidget() QWidget是PyQt5中所有用户界面类的父类。这里使用没有参数的构造方法,他没有继承其他类,我们将没有父类的QWidget 控件也叫窗口;窗口和控件都继承自QWidget类;如果不为控件指定父对象,则该控件会被当做一个窗口处理;

3、window.show()将窗口控件显示在屏幕上。window.setWindowTitle("窗口标题"),设置窗口标题;

sys.exit(app.exec_())调用该exit()方法程序的主循环会被结束,确保程序完整的结束;执行成功,exec()返回为0,否则为非0;

(c、c++从main函数返回结果都相当于使用了exit函数,main返回值会传递给exit方法的参数,PyQt5底层实现使用c++,因此exec()执行完毕后返回值为0;exec()是PyQt4中方法,为了解决Python2中exec关键词冲突,PyQt5中使用了exec_()方法名)


调整初始窗口大小

setBaseSize( 800, 600 )

重载方法sizeHint()

resize(QSize(w,h))

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值