PyQT5 QTDesigner窗口及组成的实现

一、主窗口成员

主窗口中的菜单栏、工具栏和状态栏

1.菜单栏

我们可以直接在QTDesigner中输入菜单选项即可。这些菜单选项本质上都是动作,关于动作,在下面章节进行描述。

2.工具栏(动作)

要在工具栏中添加按钮,我们首先要在QTDesigner的菜单栏中选择视图-->动作编辑器,打开动作编辑器:

因为,能够用于工具栏的控件并不是普通的pushButton按钮,而是叫做Action的动作。

此时,我们就可以将需要的动作(Action)拖拽到工具栏中:

当然,我们可以自定义一些Action,并添加到工具栏中。

我们可以在鼠标右键中选择新建工具栏,从而创建多个工具栏(每个工具栏之间有4个竖点隔开):

注意:动作编辑器中的所有动作都是菜单栏和工具栏共用的。本质上说,工具栏就是菜单栏中功能的快捷按钮,方便用户使用。

二、窗口类型

我们在QTDesigner中新建窗口的时候,可以看到有以下几种窗口:

窗口大致分为三种,Main Window、Widget和Dialog。

Main Window:主窗口,其中包含菜单栏、工具栏、状态栏,是我们经常使用的窗口类型,一般用于程序的主窗口。

Dialog:对话窗口的基类,没有菜单栏、工具栏、状态栏,但可能有默认的一些操作按钮,例如确定、关闭等。

Widget:当我们不确定窗口用途的时候,可以使用Widget窗口。

三、关闭窗口的两种方式

第一种方式是发送信号调用主窗口的Close方法。

第二种方式是发送信号调用QApplication的quit方法(即退出整个程序)。

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

from ui3 import Ui_MainWindow

class MyWindow(QMainWindow):
  def __init__(self):
    super(MyWindow, self).__init__()

  # 重写close槽函数
  def close(self):
    print("这里我们重写一下主窗口的close方法")
    super(MyWindow, self).close()

  # 调用App.quit()来退出程序
  def quitApp(self):
    app = QApplication.instance()
    print("退出整个程序")
    app.quit()

if __name__ == '__main__':
  # 创建一个App实例
  app = QApplication(sys.argv)
  # 创建一个主窗口
  mainWin = MyWindow()
  # 使用我们生成的UI窗口实例
  ui = Ui_MainWindow()
  # 将主窗口传递进去,让Ui_MainWindow帮我们向主窗口上放置组件
  ui.setupUi(mainWin)
  # 显示
  mainWin.show()

  # 主循环
  sys.exit(app.exec_())

其中close槽函数,对应主窗口原本的close方法(只是重写一下打印了一句话)。

quitApp是另一个槽函数,由另一个按钮触发,同样可以达到关闭窗口的效果(退出整个程序)。

下面附上自动生成的ui3.py的代码(就两个按钮,关联了两个槽函数):

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'ui3.ui'
#
# Created by: PyQt5 UI code generator 5.14.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
  def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(1264, 886)
    sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
    sizePolicy.setHorizontalStretch(1)
    sizePolicy.setVerticalStretch(0)
    sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
    MainWindow.setSizePolicy(sizePolicy)
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
    self.pushButton = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton.setGeometry(QtCore.QRect(120, 130, 75, 23))
    self.pushButton.setObjectName("pushButton")
    self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton_2.setGeometry(QtCore.QRect(280, 140, 75, 23))
    self.pushButton_2.setObjectName("pushButton_2")
    MainWindow.setCentralWidget(self.centralwidget)
    self.menubar = QtWidgets.QMenuBar(MainWindow)
    self.menubar.setGeometry(QtCore.QRect(0, 0, 1264, 23))
    self.menubar.setObjectName("menubar")
    MainWindow.setMenuBar(self.menubar)
    self.statusbar = QtWidgets.QStatusBar(MainWindow)
    self.statusbar.setObjectName("statusbar")
    MainWindow.setStatusBar(self.statusbar)

    self.retranslateUi(MainWindow)
    self.pushButton.clicked.connect(MainWindow.close)
    self.pushButton_2.clicked.connect(MainWindow.quitApp)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

  def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    self.pushButton.setText(_translate("MainWindow", "PushButton"))
    self.pushButton_2.setText(_translate("MainWindow", "PushButton"))

四、窗口坐标

通过以下方式可以获取窗口的坐标和尺寸:

# 使用一个按钮触发该槽函数,用于获取当前窗口的位置和尺寸
def getSizeOfMainWin(self):
  # 窗口左上角所在坐标
  print(self.x()) # 100
  print(self.y()) # 100
  # 整个窗口的宽和高
  print(self.width()) # 1264
  print(self.height()) # 886
  # 可用区域左上角所在坐标
  print(self.geometry().x()) # 101,说明可用区域左边有一个1px的边框
  print(self.geometry().y()) # 131,说明窗口上面的标题栏为31px(包含1px边框)
  # 整个窗口的宽和高,与self.width()、self.height()相同
  print(self.geometry().width()) # 1264
  print(self.geometry().height()) # 886

五、窗口和应用程序坐标

有以下两种方法可以设置窗口和应用程序坐标。

需要引入:from PyQt5.QtGui import QIcon

1.使用窗口对象的setWindowIcon方法

当使用窗口的setWindowIcon方法时,在Windows系统下才生效(在MAC中不能生效):

class MyWindow(QMainWindow):
  def __init__(self):
    super(MyWindow, self).__init__()
    self.initUI()

  def initUI(self):
    self.setWindowIcon(QIcon("icon.ico"))

效果:

2.使用QApplication实例的setWindowIcon方法

if __name__ == '__main__':
  # 创建一个App实例
  app = QApplication(sys.argv)
  app.setWindowIcon(QIcon("icon.ico"))

  # 创建一个主窗口
  mainWin = MyWindow()
  # 使用我们生成的UI窗口实例
  ui = Ui_MainWindow()
  # 将主窗口传递进去,让Ui_MainWindow帮我们向主窗口上放置组件
  ui.setupUi(mainWin)
  # 显示
  mainWin.show()
  # 主循环
  sys.exit(app.exec_())

这种方式对于Windows系统和MAC系统都生效。

到此这篇关于PyQT5 QTDesigner窗口及组成的实现的文章就介绍到这了,更多相关PyQT5 QTDesigner窗口内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pyqt5、qtdesigner安装和环境设置教程

    前言 最近工作需要写一个界面程序来调用摄像头并对摄像头采集的图像做一些处理.程序需要使用Python语言编写,经过调研发现PyQt5配合QtDesigner在界面程序编写方面具有功能丰富.入门简单的优点,适合我这种编程的小白.PyQt5虽然入门比较简单,但对于我这种小白来讲还是挺有难度的,学习过程中也费了不少的力气,因此在这里总结一下程序编写的过程,方便以后回顾,也方便有需要的童鞋借鉴. 我工作中使用的是USB接口输入的Flir相机,结合串口输出将相机和其它硬件组成闭环回路.这里介绍的是一个简化

  • PYQT5 vscode联合操作qtdesigner的方法

    除了使用pycharm外,还可使用vscode来操作pyqt,方法如下: 1. 在vscode中配置相关的pyqt的相关 根据自己实际情况修改第一项pyqt的路径 2. 创建一个文件夹,右键,最后一项可以创建一个新窗口 创建的新窗口后缀为 .ui 右键中有以下四个选项,分别是创建一个新窗口,预览,编辑,编译产生py文件. 我们在designer中设计完成后,通过最后一个编译生成文件. 通过pycharm生成的为一个和designer一样的py文件,如上图中第二个文件.通过vscode生成的是以U

  • PyCharm+PyQt5+QtDesigner配置详解

    关于 最近要在python下做可视化界面的设计,想到之前用QtDesigner来画界面很是方便,当时画完之后都要手动在终端输入 pyuic5 -o 1.py 1.ui 来把.ui文件转换为.py的代码再进行编辑,不是很方便,联想到要是能在PyCharm下完成所有工作就好了,所以就有了这篇博客,简单记录下,不够详细的地方请谅解. 配置前提 PyCharm (这个不多说,官网下载安装) Anaconda 1.8.7(强烈安利,很好的python包管理平台,官网下载安装) python 3.6.5 (

  • pyqt5利用pyqtDesigner实现登录界面

    本文实例为大家分享了pyqt5利用pyqtDesigner实现登录界面的具体代码,供大家参考,具体内容如下 为便于操作 界面和逻辑分离 逻辑类: import sys import pymysql from loginUI import * //导入 from PyQt5.QtWidgets import * from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import * from PyQt5.QtGui import

  • PyQT5 QTDesigner窗口及组成的实现

    一.主窗口成员 主窗口中的菜单栏.工具栏和状态栏 1.菜单栏 我们可以直接在QTDesigner中输入菜单选项即可.这些菜单选项本质上都是动作,关于动作,在下面章节进行描述. 2.工具栏(动作) 要在工具栏中添加按钮,我们首先要在QTDesigner的菜单栏中选择视图-->动作编辑器,打开动作编辑器: 因为,能够用于工具栏的控件并不是普通的pushButton按钮,而是叫做Action的动作. 此时,我们就可以将需要的动作(Action)拖拽到工具栏中: 当然,我们可以自定义一些Action,并

  • PyQt5主窗口动态加载Widget实例代码

    本文研究的主要是PyQt5主窗口动态加载Widget的代码示例,具体如下. 我们通过Qt Designer设计两个窗口,命名为主窗口(MainForm)和子窗口(ChildrenForm).我们在主窗口的空白中央添加一个栅格布局并命名为MaingridLayout,等会需要将ChildrenForm放进去. 编写代码 from PyQt5 import QtWidgets from MainForm import Ui_MainForm from Children import Ui_Form

  • pyqt5 禁止窗口最大化和禁止窗口拉伸的方法

    如下所示: 在def __init__(self):函数里添加 self.setFixedSize(self.width(), self.height()) 以上这篇pyqt5 禁止窗口最大化和禁止窗口拉伸的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 对PyQt5基本窗口控件 QMainWindow的使用详解

    QMainWindow基本介绍 QMainWindow主窗口为用户提供了一个应用程序框架,它有自己的布局,可以在布局中添加控件. 窗口类型介绍 PyQt5中,主要使用以下三个类来创建窗口,可以直接使用,也可以继承后再使用 QMainWindow QWidget QDialog QMainWindow QMainWindow可以包含菜单栏,工具栏,状态栏,标题栏等,是GUI程序的主窗口. 如果我们需要创建主窗口程序,就使用该类. QDialog QDialog是对话框窗口的基类,对话框一般用来执行

  • PyQt5 多窗口连接实例

    前言 之前做过pyqt的一个简单界面,在一个窗口(MainWindow)中实现一些操作:之前嫌麻烦没有去做多窗口和它们的切换功能.最近研究了下窗口的调用和切换. pyqt4和5有很多不同,在参考别人案例的时候走了很多弯路,最后在pyqt5下实现了简洁的多窗口切换为大家参考. 思路 多窗口的切换和显示连接到按钮的信号上再进行show()就行,格式上有别于pyqt4. 一个逻辑比较清晰的解决方案是,使用一个主程序,在其中实例化各个窗口,然后定义它们的显示逻辑即是按钮的槽函数. 格式上稍有不对就会报错

  • python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法

    本文借用HTML的css语法,将样式表应用到窗口部件.这里只是个简单的例子,实际上样式表的语法很丰富. 以下类似于css: StyleSheet = """ QComboBox { color: darkblue; } QLineEdit { color: darkgreen; } QLineEdit[mandatory="true"] { #mandatory="true"时,QLineEdit的样式会变化 background-co

  • python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例

    PyQt5不规则窗口实现动画效果实例 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * class ShapeWidget(QWidget): def __init__(self,parent=None): super(ShapeWidget, self).__init__(parent) self.i=1 self.mypix() self.timer=QT

  • 关于PyQt5主窗口图标显示问题汇总

    窗口程序的开发流程如下: 1. 先通过qt designer设置界面并将程序图标设置好,通过在designer中按ctrl + R 进行预览可以看到窗口左上角的图标,然后保存 2. 通过pyuic5和pyrcc5命令将ui文件和qrc文件转换为py文件 3.然后在主程序中将界面显示出来,源码如下: class Main(QMainWindow, Ui_MainWindow, QWidget): def __init__(self, parent=None): super(Main, self).

  • pyqt5 设置窗口圆角及阴影的操作

    pyqt5 设置窗口圆角及阴影 效果: 代码如下: 创建一个 圆角边框的类,让后直接继承就行 from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * class RoundShadow(QWidget): """圆角边框类""" def __init__(self, parent=None): super(RoundShadow, sel

随机推荐