PyQt5入门(五)与Designer分手,开始转向纯代码构建

目录

主窗口类型(3种):

 让主窗口居中

退出应用程序

屏幕坐标系

设置窗口和应用程序图标

控件提示信息


从本篇开始,就不再以designer为主来来进行学习了,而是转向纯py代码来实现程序的构建。

主窗口类型(3种):

PyQt5入门(五)与Designer分手,开始转向纯代码构建_第1张图片

import sys
from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5.QtGui import QIcon #图标

class FirstMainWin(QMainWindow):
    #self指针指向该类创建的实例对象
    #parent指代实体的窗口对象,也就是主函数里面那个mainWindow=QMainWindow()
    #两个__init__(parent)中的parent加不加都无所谓
    #init不要写成int!!!!!!!!!!!
    def __init__(self,parent=None):
        #调用父类初始化函数
        super(FirstMainWin, self).__init__(parent)
        #设置著窗口的标题
        self.setWindowTitle('first mainWindow app')
        #设置窗口的尺寸
        self.resize(400,300)
        #获得当前状态栏
        self.status=self.statusBar()
        self.status.showMessage('a message that only exsits 5s',5000)
        print('初始化完毕!')


if __name__=='__main__':
    app=QApplication(sys.argv)
    #设置应用程序图标
    app.setWindowIcon(QIcon('./icon/first.png'))

    main=FirstMainWin()#__init__()创建对象时就自动调用了
    main.show()

    #进入程序主循环
    sys.exit(app.exec_())

 有bug,类里的初始化函数没执行,咋肥事???__init__写成__int__了,可恶。

运行结果:

PyQt5入门(五)与Designer分手,开始转向纯代码构建_第2张图片

 让主窗口居中

窗口的位置是根据左上角的坐标来确定的,在pyqt5中并没有直接的API使窗口居中,所以要自己写一个类。

代码中已说的足够。

import sys
from PyQt5.QtWidgets import QMainWindow,QApplication,QDesktopWidget

class FirstMainWin(QMainWindow):
    #parent指代实体的窗口对象,也就是主函数里面那个mainWindow=QMainWindow()
    #两个__init__(parent)中的parent加不加都无所谓
    def __init__(self,parent=None):
        #调用父类初始化函数
        super(FirstMainWin, self).__init__(parent)
        #设置著窗口的标题
        self.setWindowTitle('centralize')
        #设置窗口的尺寸
        self.resize(400,300)
        #self.center()

    def center(self):
        # 获得屏幕坐标系
        screen=QDesktopWidget().screenGeometry()
        # 获得窗口坐标系
        size=self.geometry()
        '''
        即(screen.width(),screen.height())是屏幕的右下角,可用来计算屏幕的分辨率
        (size.width(),size.height())是窗口的宽和高,可计算窗口大小,故而不难理解下面的算法
        '''
        newLeft=(screen.width()-size.width())/2
        newTop=(screen.height()-size.height())/2
        self.move(newLeft,newTop)#窗口的新左上角坐标


if __name__=='__main__':
    app=QApplication(sys.argv)

    main=FirstMainWin()#__init__()创建对象时就自动调用了
    main.center()#或者直接在init函数中加一句self.center()
    main.show()

    #进入程序主循环
    sys.exit(app.exec_())

退出应用程序

突然感觉有本书的重要性,,东西好零散。

import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QWidget,QHBoxLayout,QPushButton

class QuitApplication(QMainWindow):
    def __init__(self):
        super(QuitApplication, self).__init__()
        self.resize(400,300)
        self.setWindowTitle('退出应用程序')

        #添加Button
        self.button1=QPushButton('退出应用程序')
        #将信号与槽关联
        self.button1.clicked.connect(self.onClick_Button)#注意括号里的参数不带括号

        # 创建水平布局
        layout=QHBoxLayout()
        #将button1添加到水平布局
        layout.addWidget(self.button1)

        #QWidget上存放所有组件
        '''
        基础窗口控件QWiget类是所有用户界面对象的基类,所有的窗口和空间都是直接或者间接继承自QWiget类。QWidget继承自 QObject 和 PaintDevice 。
        '''
        mainFrame=QWidget()
        #将水平布局放到主框架上
        mainFrame.setLayout(layout)
        #将主框架放到主窗口上
        self.setCentralWidget(mainFrame)


    #按钮单击事件(自定义的槽)
    def onClick_Button(self):
        # 接收按钮信号
        sender=self.sender()
        #sender.text()输出按钮的文本
        print(sender.text()+'按钮被按下')
        app=QApplication.instance()#返回APP实例
        #退出应用程序
        app.quit()

if __name__=='__main__':
    app=QApplication(sys.argv)
    main=QuitApplication()
    main.show()
    sys.exit(app.exec_())

运行结果:

PyQt5入门(五)与Designer分手,开始转向纯代码构建_第3张图片

 点击”退出应用程序“窗口就关闭了。

屏幕坐标系

先搞清楚窗口和工作区的区别

PyQt5入门(五)与Designer分手,开始转向纯代码构建_第4张图片

窗口就是上面那一整个,而工作区在苹果系统下就是标题栏下面那一块,但是在Windows下是红色区域那一块,故而win下工作区和窗口之间还是有边框的,所以苹果下和win的数据不太一样。

代码(看注释,简单易懂):

import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton

#面向过程

def onClick_Button():
    print('1')
    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')
    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('3')
    print('widget.frameGeometry().x()=%d' % widget.frameGeometry().x()) #窗口横坐标
    print('widget.frameGeometry().y()=%d' % widget.frameGeometry().y()) #窗口纵坐标
    print('widget.frameGeometry().width()=%d' % widget.frameGeometry().width())   #窗口宽度
    print('widget.frameGeometry().height()=%d' % widget.frameGeometry().height()) #窗口高度

    return


app=QApplication(sys.argv)
widget=QWidget()

btn=QPushButton(widget)
btn.setText('按钮')
btn.move(24,52)
#连接信号与槽
btn.clicked.connect(onClick_Button)

widget.resize(300,240) #设置工作区尺寸,不包括标题栏
widget.move(250,200)
widget.setWindowTitle('屏幕坐标系')

widget.show()
sys.exit(app.exec_())

运行结果:

1
widget.x()=250
widget.y()=200
widget.width()=300
widget.height()=240
2
widget.geometry().x()=259
widget.geometry().y()=238
widget.geometry().width()=300
widget.geometry().height()=240
3
widget.frameGeometry().x()=250
widget.frameGeometry().y()=200
widget.frameGeometry().width()=318
widget.frameGeometry().height()=287

 

设置窗口和应用程序图标

首先,窗口图标是打开应用左上角的图标; 应用图标是桌面应用图标

窗口的setWindowIcon方法用于设置窗口的图标,只在Windows中可用,
QApplication中的setWindowIcon方法用于设置主窗口的图标和应用程序图标,

但调用了窗口的setWindowIcon方法,QApplication中的setWindowIcon方法就只能用于设置应用程序图标了(这样就可以分别设置应用和窗口图标了)。

import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication,QMainWindow

class IconForm(QMainWindow):
    def __init__(self):
        super(IconForm, self).__init__();
        self.initUI()
    def initUI(self):
        #设置窗口坐标系(位置,大小)
        self.setGeometry(300,300,250,250);#x,y,w,h
        #设置主窗口的标题
        self.setWindowTitle('set window icon')
        #设置窗口图标
        self.setWindowIcon(QIcon('./icon/first.png'))


if __name__=='__main__':

    app=QApplication(sys.argv)
    #app.setWindowIcon(QIcon('./icon/first.png'))
    main=IconForm()
    main.show()
    sys.exit(app.exec_())

控件提示信息

就是鼠标停在那里,就会浮现出提示信息。

代码:

import sys
from PyQt5.QtWidgets import QApplication,QWidget,QMainWindow,QHBoxLayout,QPushButton,QToolTip #控件提示信息类
from PyQt5.QtGui import QFont #字体

class ToolTipForm(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        QToolTip.setFont(QFont('SansSerif,12'))
        #设置提示信息,是设置粗体
        self.setToolTip('今天是星期一')
        self.setGeometry(300,300,200,300)
        self.setWindowTitle('tool_tip')

        self.btn1=QPushButton('my button')
        #设置按钮的提示信息
        self.btn1.setToolTip('I am a button!')

        layout=QHBoxLayout()
        layout.addWidget(self.btn1)
        mainFrame=QWidget()#此处若改为QMainWindow则不会显示控件!
        mainFrame.setLayout(layout)
        self.setCentralWidget(mainFrame)


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=ToolTipForm()
    main.show()
    sys.exit(app.exec_())

运行结果:

PyQt5入门(五)与Designer分手,开始转向纯代码构建_第5张图片(鼠标放到按键上)             PyQt5入门(五)与Designer分手,开始转向纯代码构建_第6张图片(鼠标放到主窗口上)

 

 

 

 

 

 

 

 

你可能感兴趣的:(PyQt5,pyqt5,桌面应用)