欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

QT学习之第一个程序

程序员文章站 2024-02-21 21:09:46
...

QT学习之第一个程序

 

目录

手动创建主窗口
居中显示
添加窗口图标
显示提示文本
Message Box的应用
手动连接信号与槽

 

 

 

手动创建主窗口

 

窗口类型

QMainWindow:
可以包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,也是GUI程序的主窗口


QWidget:
如果是主窗口就使用,如果是对话框就使用,如果不确定,或者有可能作为顶层窗口,也有可能嵌入到其他窗口中,那么就使用
QWidget类


QDialog:
对话窗口的基类。对话框主要用来执行短期任务,或者与用户进行互动,它可以使模态,也可以是非模态的。
QDialog窗口没有菜单栏、工具栏、状态栏等

  

 

 

 QMainWindow

如果一个窗口包含一个或者多个窗口,那么这个窗口就是父窗口,被包含的窗口则是子窗口。
没有父窗口的窗口就是顶层窗口,QMainWindow就是顶层窗口,它可以包含很多界面元素,如果菜单栏、工具栏、状态栏、子窗口。

 

QMainWindow继承自QWidget类,拥有它的所有派生方法和属性

QMainWindow类中比较重要的方法:
addToolBar():添加工具栏
centralWidget():返回窗口中心的一个控件,来设置返回Null
setCentralWidget():设置窗口中心的控件
setStatusBar():设置状态栏
statusBar():获得状态栏对象后,调用状态栏对象的showMessage(message,int timeout = 0)方法,显示状态栏信息,其中第一个参数是要显示的状态信息;第二个参数是信息停留的时间,单位是毫秒,默认是0,表示一直显示状态栏的信息
QMainWindow不能设置布局(使用setLayout方法),因为它有自己的布局

  

 

 手动创建主窗口

QT学习之第一个程序QT学习之第一个程序
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5.QtGui import QIcon

class MainWindow(QMainWindow):
    def __init__(self,parent=None):
        super(MainWindow,self).__init__(parent)
        self.resize(400,200)
        self.setWindowTitle('MainWindow主窗口')


if __name__ == '__main__':
    app=QApplication(sys.argv)
    form=MainWindow()
    form.show()
    sys.exit(app.exec_())
程序示例

 

 

程序运行结果

QT学习之第一个程序

 

 

 代码解析

 

 这里导入模块,widget组件位于PyQt5.QtWidget模块中

import sys
from PyQt5.QtWidgets import QMainWindow,QApplication

  

 自定义的窗口类MainWindow中,继承主窗口QMainWindow类所有的属性和方法

然后使用父类QMainWindow的构造函数super()初始化窗口

class MainWindow(QMainWindow):
    def __init__(self,parent=None):
        super(MainWindow,self).__init__(parent)

  

设置窗口大小

 self.resize(400,200)

  

 

 设置窗口标题

self.setWindowTitle('MainWindow主窗口')

 

 

所有的PyQt5应用必须创建一个应用(Application)对象。sys.argv参数是一个来自命令行的参数列表。Python脚本可以在shell中运行。这是我们用来控制我们应用启动的一种方法。 

 app = QApplication(sys.argv)

  

 

 实例化(初始化一个主窗口)

form=MainWindow()

  

 

 show()方法在屏幕上显示出主窗口

form.show()

  

 

最后,应用进入主循环。在这个地方,事件处理开始执行。主循环用于接收来自窗口触发的事件,并且转发他们到widget应用上处理。如果我们调用exit()方法或主widget组件被销毁,主循环将退出。sys.exit()方法确保一个不留垃圾的退出。系统环境将会被通知应用是怎样被结束的。

exec_()方法有一个下划线。因为exec是Python保留关键字。因此,用exec_()来代替。

	
sys.exit(app.exec_())

  

 

 

 

 

 

居中显示

 

 程序示例

QT学习之第一个程序QT学习之第一个程序
 1 import sys
 2 from PyQt5.QtWidgets import QMainWindow,QApplication,QDesktopWidget
 3 
 4 class MainWindow(QMainWindow):
 5     def __init__(self,parent=None):
 6         super(MainWindow,self).__init__(parent)
 7         self.resize(400,200)
 8         self.setWindowTitle('MainWindow主窗口')
 9         self.center()
10     def center(self):
11         screen =QDesktopWidget().screenGeometry()
12         size=self.geometry()
13         self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2)
14 
15 if __name__ == '__main__':
16     app=QApplication(sys.argv)
17     form=MainWindow()
18     form.show()
19     sys.exit(app.exec_())
View Code

 

 

代码解析

 

QMainWindow利用QDeskWidget类来实现居中显示

from PyQt5.QtWidgets import QMainWindow,QApplication,QDesktopWidget

  

 

QDesktopWidget().screenGeometry()获得屏幕大小

self.geometry()获得QWidget窗口的大小

self.move():移动窗口位置

    def center(self):
        screen =QDesktopWidget().screenGeometry()
        size=self.geometry()
        self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2)

  

 

 

 

添加窗口图标

 

 

 程序示例

QT学习之第一个程序QT学习之第一个程序
 1 import sys
 2 from PyQt5.QtWidgets import QMainWindow,QApplication
 3 from PyQt5.QtGui import QIcon
 4 
 5 class MainWindow(QMainWindow):
 6     def __init__(self,parent=None):
 7         super(MainWindow,self).__init__(parent)
 8         self.resize(400,200)
 9         self.initUI()
10 
11     def initUI(self):
12         self.setGeometry(300, 300, 300, 220)
13         self.setWindowTitle('Icon')
14         self.setWindowIcon(QIcon("t01ad133e672b2af23e.webp.jpg"))
15 
16 
17 if __name__ == '__main__':
18     app=QApplication(sys.argv)
19     form=MainWindow()
20     form.show()
21     sys.exit(app.exec_())
View Code

 

 运行结果

 QT学习之第一个程序

 

 

代码解析

 

导入必要的模块

from PyQt5.QtGui import QIcon

  

 setGeometry()做了两件事:将窗口在屏幕上显示,并设置了它的尺寸。setGeometry()方法的前两个参数定位了窗口的x轴和y轴位置。第三个参数是定义窗口的宽度,第四个参数是定义窗口的高度。事实上,这是将resize()和move()方法融合在一个方法内。为了做好这个例子,我们创建了一个QIcon对象。QIcon对象接收一个我们要显示的图片路径作为参数。

def initUI(self):
        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon("t01ad133e672b2af23e.webp.jpg"))

  

 

 

 

显示提示文本

 

程序示例

QT学习之第一个程序QT学习之第一个程序
 1 import sys
 2 from PyQt5.QtWidgets import (QMainWindow, QToolTip,QPushButton, QApplication)
 3 from PyQt5.QtGui import QFont
 4 
 5 
 6 class MainWindow(QMainWindow):
 7     def __init__(self,parent=None):
 8         super(MainWindow,self).__init__(parent)
 9         self.initTip()
10 
11     def initTip(self):
12         QToolTip.setFont(QFont('SansSerif', 10))
13         # self.setToolTip('This is a <b>QWidget</b> widget')
14         btn = QPushButton('Button', self)
15         btn.setToolTip('This is a <b>QPushButton</b> widget')
16         btn.resize(btn.sizeHint())
17         btn.move(50, 50)
18         self.setGeometry(300, 300, 300, 200)
19         self.setWindowTitle('Tooltips')
20 
21 
22 
23 if __name__ == '__main__':
24     app = QApplication(sys.argv)
25     form= MainWindow()
26     form.show()
27     sys.exit(app.exec_())
View Code

 

 

 

运行结果

QT学习之第一个程序

 

 

 

 代码解析

 

 从方法的名字看上去,这个函数设置了提示框的字体,我们使用了10px的SansSerif字体。

QToolTip.setFont(QFont('SansSerif', 10))

  

 

 调用setTooltip()创建提示框可以使用富文本格式的内容。

self.setToolTip('This is a <b>QWidget</b> widget')

  

 

创建一个按钮,并添加一个提示框

btn = QPushButton('Button', self) 
btn.setToolTip('This is a <b>QPushButton</b> widget')

  

 

调整按钮大小,并让按钮在屏幕上显示出来,sizeHint()方法提供了一个默认的按钮大小。

btn.resize(btn.sizeHint())
btn.move(50, 50)

  

 

 

 

Message Box的应用

详细的内容:https://gaianote.github.io/2018/08/03/pyqt5%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C/

 

 

 

 

手动连接信号与槽

 

 

 

 手动连接信号与槽的方法

QT学习之第一个程序

 

 

 

 程序示例

QT学习之第一个程序QT学习之第一个程序
 1 import sys
 2 from PyQt5.QtWidgets import QMainWindow, QApplication, QHBoxLayout, QPushButton, QWidget
 3 
 4 
 5 class MainWindow(QMainWindow):
 6     def __init__(self, parent=None):
 7         super(MainWindow, self).__init__(parent)
 8 
 9         self.setWindowTitle("MainWindow")
10         self.button1 = QPushButton('关闭窗口')
11         self.button1.clicked.connect(self.onButtonClick)
12         self.setGeometry(300, 300, 300, 300)
13        
14         self.button1.setFixedSize(55,40)
15       
16         layout = QHBoxLayout()
17        
18         layout.addWidget(self.button1)
19 
20         main_frame = QWidget()
21         main_frame.setLayout(layout)
22         self.setCentralWidget(main_frame)
23 
24     def onButtonClick(self):
25         
26         sender = self.sender()
27         print(sender.text() + '被按下了')
28         qApp = QApplication.instance()
29         qApp.quit()
30 
31 
32 if __name__ == '__main__':
33     app = QApplication(sys.argv)
34     form = MainWindow()
35     form.show()
36     sys.exit(app.exec_())
View Code

 

 

运行结果

点击关闭按钮会关闭窗口,并会出现关闭窗口被按下

QT学习之第一个程序

 

 

代码解析

 

创建一个按钮

self.button1 = QPushButton('关闭窗口')

  

将信号(按钮)与槽连接起来

self.button1.clicked.connect(self.onButtonClick)

 

设置按钮的固定大小

self.button1.setFixedSize(55,40)

 

 

构造一个水平布局管理器,必须将它添加到另一个布局管理器中

在这个水平的布局管理器中添加button

layout = QHBoxLayout()
layout.addWidget(self.button1)

  

 

创建一个QWidget,用来添加水平布局管理器

 main_frame = QWidget()
 main_frame.setLayout(layout)

  

 

如果继承的是QMainWindow,需要设置setCentralWidget()

 self.setCentralWidget(main_frame)