鱼C论坛

 找回密码
 立即注册
查看: 1193|回复: 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创建主窗口代码:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QIcon

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

if __name__ =="__main__":
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_())
代码分析
self.status.showMessage("这是状态栏提示",500)
> 使用QMainWindow类的statusBar()方法创建状态栏,然后使用showMessage()方法将提示信息显示在状态栏中,提示的显示时间是5秒,5秒后状态提示信息消失。

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

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

1.1.3将主窗口放在屏幕中间
代码:
from PyQt5.QtWidgets import QDesktopWidget, QApplication, QMainWindow
import sys

class winFrom(QMainWindow):

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

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

    def center(self):
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = winFrom()
    win.show()
    sys.exit(app.exec_())

代码分析:
self.resize(370, 250)


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

screen = QDesktopWidget().screenGeometry()

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

size = self.geometry()

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

self.move((screen.width() - size.width()) / 2,(screen, height()) / 2)

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

---
1.1.4 关闭主窗口
import sys
from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QPushButton, QApplication, QWidget

class winFrom(QMainWindow):

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

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

        main_frame = QWidget()
        main_frame.setLayout(layout)
        self.setCentralWidget(main_frame)

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

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

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = winFrom()
    win.show()
    sys.exit(app.exec_())
注意使用connect括号里面别用括号
代码分析
> 当单机“关闭窗口”按钮后,将关闭显示的窗口。通过以下代码将按钮的clicked信号与onButtonClick槽函数关联起来。
self.button1.clicked.connect(self.onButtonClick)
在槽函数onButtonClick()里获得QApplication类的对象,调用它的quit()函数来关闭窗口,在槽函数里还可以获得发送信号的对象。本例子中发送信号对象是按钮“关闭窗口”,然后通过按钮的Text()函数获得按钮的显示名称。

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

        sender = self.sender()
        print(sender.text() + '被按下了')
        qApp = QApplication.instance()
        qApp.quit()
本笔记来源于《PyQt5快速开发与实战》

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 16:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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