鱼C论坛

 找回密码
 立即注册
查看: 1423|回复: 0

[技术交流] 大自然搬运工之PyQt

[复制链接]
发表于 2019-4-9 09:55:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 我是python小白 于 2019-4-9 11:05 编辑

1.1QMianWindow
QMainWindow主窗口为用户提供应用程序框架,它有自己的布局,可以在布局中添加控件




1.1.1窗口类型
> QMainWindow、QWidget和QDialog三个类都是用类创建窗口的可以直接使用,也可以继承后使用。
QMianWindow窗口可以包含菜单栏、工具栏、状态栏、标题栏等,是最常用的窗口形式,也就是说是GUi程序的主窗口。
QDialog是对话框窗口的基类。对话框主要是用来执行短期任务,或者与用户互动,它可以是模态的,也可以是非模态的。
总结是:如果是主窗口,就使用QMainWindow类,如果是对话框就是用QDialog类如果不确定,或者可能嵌入到其他窗口中,那么就使用QWidget类

基类:被定义为包含所有实体共性的class类型,被称为“基类”,俗话说:基类(父类)
模态:模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。


                               
登录/注册后可看大图


1.1.2创建主窗口
> 如果一个窗口包含一个或多个窗口,那么这个窗口就是父窗口,被包含的窗口是子窗口。没有父窗口的窗口是顶层窗口,QMainWindow就是一个顶层窗口。

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


注意:QMainWindow不能设置布局(使用setlayout()方法),因为它有自己的布局。
1.1.2.1创建主窗口代码:

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QMainWindow
  3. from PyQt5.QtGui import QIcon

  4. class MainWindow(QMainWindow):
  5.     def __init__(self, parent = None):
  6.         super(MainWindow, self).__init__(parent)
  7.         self.resize(400, 200)
  8.         self.status = self.statusBar()
  9.         self.status.showMessage("这是状态栏提示", 5000)
  10.         self.setWindowTitle("PyQt MainWindow例子")

  11. if __name__ =="__main__":
  12.     app = QApplication(sys.argv)
  13.     win = MainWindow()
  14.     win.show()
  15.     sys.exit(app.exec_())
复制代码

代码分析

  1. self.status.showMessage("这是状态栏提示",500)
复制代码
> 使用QMainWindow类的statusBar()方法创建状态栏,然后使用showMessage()方法将提示信息显示在状态栏中,提示的显示时间是5秒,5秒后状态提示信息消失。

> 在自定义的窗口类MainWindow中,继承了主窗口QMainWindow类所有的属性和方法,然后使用父窗口QMainWindow的构造函数Super()初始窗口,在设置窗口标题,然后通过消息循环显示窗口,状态栏可以直接由statusBar()产生,由showMessage()来显示信息。

> 构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,就是python的__init__()魔法方法。

1.1.3将主窗口放在屏幕中间
代码:

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

  3. class winFrom(QMainWindow):

  4.     def __init__(self,parent = None):
  5.         super(winFrom, self).__init__(parent)

  6.         self.setWindowTitle("主窗口放在屏幕中间的例子")
  7.         self.resize(370, 250)
  8.         self.center()

  9.     def center(self):
  10.         screen = QDesktopWidget().screenGeometry()
  11.         size = self.geometry()
  12.         self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
  13. if __name__ == "__main__":
  14.     app = QApplication(sys.argv)
  15.     win = winFrom()
  16.     win.show()
  17.     sys.exit(app.exec_())
复制代码


代码分析:

  1. self.resize(370, 250)
复制代码


> 该行语句用来设置Qwindget窗口的大小,宽度为370像素,高度为250像素。

  1. screen = QDesktopWidget().screenGeometry()
复制代码

该行语句用来计算显示屏幕的大小:(sereen.width()*screen.height()),其中QDesktopWidget().screenGeometry()来获取屏幕大小。

  1. size = self.geometry()
复制代码

> 该行语句用来获取QWidget窗口的大小:(size.width()*size.heiget())

  1. self.move((screen.width() - size.width()) / 2,(screen, height()) / 2)
复制代码

> 该行语句窗口移动到屏幕中间。

---
1.1.4 关闭主窗口


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

  3. class winFrom(QMainWindow):

  4.     def __init__(self, parent = None):
  5.         super(winFrom,self).__init__(parent)
  6.         self.setWindowTitle("关闭主窗口例子")
  7.         self.button1 = QPushButton('关闭主窗口')
  8.         self.button1.clicked.connect(self.onButtonClick)

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

  11.         main_frame = QWidget()
  12.         main_frame.setLayout(layout)
  13.         self.setCentralWidget(main_frame)

  14.     def onButtonClick(self):
  15.         #sender是发送信号的对象

  16.         sender = self.sender()
  17.         print(sender.text() + '被按下了')
  18.         qApp = QApplication.instance()
  19.         qApp.quit()

  20. if __name__ == "__main__":
  21.     app = QApplication(sys.argv)
  22.     win = winFrom()
  23.     win.show()
  24.     sys.exit(app.exec_())
复制代码

注意使用connect括号里面别用括号
代码分析
> 当单机“关闭窗口”按钮后,将关闭显示的窗口。通过以下代码将按钮的clicked信号与onButtonClick槽函数关联起来。

  1. self.button1.clicked.connect(self.onButtonClick)
复制代码

在槽函数onButtonClick()里获得QApplication类的对象,调用它的quit()函数来关闭窗口,在槽函数里还可以获得发送信号的对象。本例子中发送信号对象是按钮“关闭窗口”,然后通过按钮的Text()函数获得按钮的显示名称。

  1. def onButtonClick(self):
  2.         #sender是发送信号的对象

  3.         sender = self.sender()
  4.         print(sender.text() + '被按下了')
  5.         qApp = QApplication.instance()
  6.         qApp.quit()
复制代码

本笔记来源于《PyQt5快速开发与实战》

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-5 19:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表