c++ windows 点击按钮跳转另一个窗体_PyQt5学习笔记(一)窗体控制

非本人原创,仅为笔记,与诸君共勉(`・ω・´)
课程链接:
PyQt5教程,来自网易云课堂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com
01841419a065f7c9c603e330f74980f4.png
此处为23讲之后的笔记,之前为Qt Designer可视化开发的入门教学

主窗口类型

  • QMainWindow:可以包含菜单栏、工具栏、状态栏和标题栏,是最常见的窗口形式。
  • QDialog:是对话窗口的基类。没有菜单栏、工具栏、状态栏。
  • QWidget:不确定窗口的用途,就使用QWidget。
推荐使用面向对象的方式创建

下面尝试用代码来创建一个QMainWOndow类型的主窗口。

开始一般必须导入的第三方库:

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

然后定义代表窗口的类,这个类继承自QMainWindow

class FirstMainWin(QMainWindow):
    def __init__(self):
        # 使用父类的构造函数,即初始化列表
        super(FirstMainWin, self).__init__()
        
        # 设置主窗口的标题
        self.setWindowTitle("第一个主窗口应用")
        
        # 设置窗口的尺寸
        self.resize(400, 300)
        
        # 获得并显示当前的状态栏
        self.status = self.statusBar()
        
        # 在状态栏上增加一个只显示5000ms的消息
        self.status.showMessage("只存在5秒的消息", 5000)
​
if __name__ == '__main__':
    # 获取系统参数列表
    app = QApplication(sys.argv)
    
    # 设置窗口图标
    app.setWindowIcon(QIcon('./image/pic.ico'))
    
    # 创建实体对象
    main = FirstMainWin()
    
    # 显示窗体
    main.show()
    
    # 进入主循环,安全退出程序
    sys.exit(app.exec_())

运行结果如下:

e286bdd639b4d31f73dc7fb77be9bcdd.png

其中__name__ == '__main__'这个判断是代表当前打开的窗体是否为这个程序的窗体。也就是说只有在当前窗口启动运行该程序,才会判对;如果使用import等手段在其他的程序或者窗口调用运行这个程序,则会判错,后续的主函数不会被执行。其中__name__代表系统当前运行的窗口名称,'__main__'代表这个程序的文件的窗口名称。

进入主函数后,app = QApplication(sys.argv)sys.exit(app.exec_())这两句话是必写的,具体意思可以在后面慢慢体会。


窗口居中显示

PyQt5本身没有让窗体居中的函数,我们需要自己写,不过也很简单。让窗口显示只需要获取系统屏幕大小的参数和我们的窗口的大小的参数,计算出窗口左上角的位置。再通过move方法移动至那个位置即可。

主体代码和上面那个一样(毕竟上面那个基本就是一个裸的框架)。不过我们需要多import一个子类QDesktopWidget

import sys
from PyQt5.QtWidgets import QDesktopWidget, QMainWindow, QApplication
from PyQt5.QtGui import QIcon
​
class CenterForm(QMainWindow):
    def __init__(self):
        # 使用父类的构造函数,即初始化列表
        super(CenterForm, self).__init__()
​
        # 设置主窗口的标题
        self.setWindowTitle("窗口居中")
​
        # 设置窗口的尺寸
        self.resize(400, 300)
​
        # 调用center方法
        self.center()
​
    def center(self):
        # 得到屏幕的尺寸
        screen = QDesktopWidget().screenGeometry()
​
        # 获取窗口尺寸
        size = self.geometry()
​
        # 计算居中窗口的左上角到屏幕左侧坐标的距离
        newLeft = (screen.width() - size.width()) / 2
​
        # 计算居中窗口的左上角到屏幕上边坐标的距离
        newTop = (screen.height() - size.height()) / 2
​
        # 移动窗口, 因为move方法只接受整数,所以我们类型转换一下
        self.move(int(newLeft), int(newTop))
​
​
if __name__ == '__main__':
    # 获取系统参数列表
    app = QApplication(sys.argv)
​
    # 创建实体对象
    main = CenterForm()
​
    # 显示窗体
    main.show()
​
    # 进入主循环,安全退出程序
    sys.exit(app.exec_())

此处用到了move()方法,这个方法对坐标系的建立和turtle库很像,它移动的对象是窗口的左上角。第一个参数代表移动后的窗口,左上角离屏幕左侧的距离;第二个参数代表移动后的窗口左上角离屏幕上方的距离。

其实windows系统下,我们的窗口默认是居中的

退出应用程序

之前可以在Qt Designer中通过将button的click()信号和close()槽函数关联来达到,只要点击button就可以直接退出程序。此处我们换一种思路,尝试通过Python代码来实现,退出应用程序。

import sys
from PyQt5.QtWidgets import QHBoxLayout, QMainWindow, QApplication, QPushButton, QWidget
​
class QuitApplication(QMainWindow):
    def __init__(self):
        super(QuitApplication, self).__init__()
        self.resize(300, 120)
        self.setWindowTitle("退出应用程序")
​
        # 添加Button
        self.button1 = QPushButton("退出应用程序")
​
        # 将信号与槽关联
        self.button1.clicked.connect(self.onClick_Button)
​
        # 创建水平布局
        layout = QHBoxLayout()
        layout.addWidget(self.button1)
​
        mainFrame = QWidget()
        mainFrame.setLayout(layout)
​
        self.setCentralWidget(mainFrame)
​
    # 按钮单机事件的方法(自定义的槽)
    def onClick_Button(self):
        print("按钮被按下")
        app = QApplication.instance()
​
        # 退出应用程序
        app.quit()
​
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = QuitApplication()
    main.show()
    sys.exit(app.exec_())

运行结果:

657004e22787289becee7f387da9c5ac.png
点击便退出

设置窗口和应用程序图标

import ...
​
class IconForm(QMainWindow):
    def __init__(self):
        super(IconForm, self).__init__()
        self.initUI()
​
    def initUI(self):
        self.setWindowTitle("设置窗口图标")
        self.resize(400, 300)
​
        # 设置窗口图标
        self.setWindowIcon(QIcon("./image/pic.ico"))
​
​
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = IconForm()
    main.show()
    sys.exit(app.exec_())

运行结果:

2bf0a679ae2d08ec0fb553dee58cd4df.png

这个结果与操作系统有关,在windows环境下,结果如图所示,这个方法只能设置窗口图标;在Mac环境下,这个方法只显示了应用程序的图标(就是任务栏上的那个启动的程序的图标)。

所以这个方法只在windows中凑效。


显示控件的提示信息

什么叫控件的提示信息呢?每当我们将光标移动到一个按钮或者一个程序时,过一小会儿,光标会显示出一个小白框来显示这个按钮或者这个程序的名称或更多信息。

import sys
from PyQt5.QtWidgets import QHBoxLayout, QMainWindow, QApplication, QToolTip, QPushButton, QWidget
from PyQt5.QtGui import QFont
​
class ToolTipForm(QMainWindow):
    def __init__(self):
        super(ToolTipForm, self).__init__()
        self.initUI()
​
    def initUI(self):
        # 设置字体及其大小
        QToolTip.setFont(QFont("SanSerif", 12))
​
        # 设置当前对象即窗口的提示信息,给“星期五”加一个代表加粗的HTML标签
        self.setToolTip("今天是<b>星期五</b>")
​
        # 设置窗口大小,四个参数代表x,y,width,height,相当于move和resize两个函数的作用
        self.setGeometry(300, 300, 300, 300)
        self.setWindowTitle("设置控件提示信息")
​
        # 创建并设置按钮的提示信息
        self.button1 = QPushButton("我的按钮")
        self.button1.setToolTip("这是一个按钮")
        layout = QHBoxLayout()
        layout.addWidget(self.button1)
​
        mainFrame = QWidget()
        mainFrame.setLayout(layout)
​
        self.setCentralWidget(mainFrame)
​
​
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = ToolTipForm()
    main.show()
    sys.exit(app.exec_())

运行结果

126b1d08577935a15e0b425e28520dae.png

c3955fc9238ad369a92c292f7538b6cd.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值