1. Qt Designer 快速入门

Qt Designer 是交互式可视化GUI设计工具,可以帮助我们快速开发 PyQt 程序的速度。

它生成的 UI 界面是一个后缀为 .ui 的文件,可以通过 pyiuc 转换为 .py 文件。

1.1  新建主窗口

在模板选项中,最常用的是 Widget (通用窗口) 和 Main Window (主窗口)。

1.2 窗口主要区域介绍

Widget Box 其中提供了很多控件,可以直接拖放到主窗口中。在菜单栏选择 “Form” -> "Preview", 或者按“Ctrl + R”即可预览。

Object Inspactor 里边是对象列表,可以看出对象的层次关系。

Property Editor 可以编辑对象的属性

Signal / slot Editor 编辑信号,管理图片

1.3 将 ui 文件转为 py 文件

利用 加载好的 PyUIC 工具 转变为 py

转换成功的 myMainWindow.py 代码如下所示

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

# Form implementation generated from reading ui file 'myMainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_myMainWindow(object):
def setupUi(self, myMainWindow):
myMainWindow.setObjectName("myMainWindow")
myMainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(myMainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(140, 270, 75, 23))
self.pushButton.setObjectName("pushButton")
myMainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(myMainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
myMainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(myMainWindow)
self.statusbar.setObjectName("statusbar")
myMainWindow.setStatusBar(self.statusbar) self.retranslateUi(myMainWindow)
QtCore.QMetaObject.connectSlotsByName(myMainWindow) def retranslateUi(self, myMainWindow):
_translate = QtCore.QCoreApplication.translate
myMainWindow.setWindowTitle(_translate("myMainWindow", "MainWindow"))
self.pushButton.setText(_translate("myMainWindow", "Confirm"))

1.4 界面与逻辑分离

通过转换 ui 文件为 py 文件,得到的只是界面的 ui 的类, 并不包括启动界面的函数,我们称之为界面文件。需要一个新建一个 py 文件调用文件,这个新建的文件我们称为逻辑文件。

新建一个 CallmyMainWindow.py 代码如下

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

import sys
from PyQt5.QtWidgets import QApplication , QMainWindow
from myMainWindow import * class MyMainWindow(QMainWindow, Ui_myMainWindow):
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.setupUi(self) if __name__=="__main__":
# 每一pyqt5应用程序必须创建一个应用程序对象。sys.argv参数是一个列表,从命令行输入参数。
app = QApplication(sys.argv)
myWin = MyMainWindow()
# 显示在屏幕上
myWin.show()
# 系统exit()方法确保应用程序干净的退出
# 的exec_()方法有下划线。因为执行是一个Python关键词。因此,exec_()代替
sys.exit(app.exec_())

2. 布局

2.1 布局管理器布局

四种布局方式

新建一个文本框( lineEdit) 和一个按钮 ( pushButton ).选中右键布局

# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_myMainWindow(object):
def setupUi(self, myMainWindow):
myMainWindow.setObjectName("myMainWindow")
myMainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(myMainWindow)
self.centralwidget.setObjectName("centralwidget")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setGeometry(QtCore.QRect(130, 190, 216, 25))
self.widget.setObjectName("widget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.lineEdit = QtWidgets.QLineEdit(self.widget)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout.addWidget(self.lineEdit)
self.pushButton = QtWidgets.QPushButton(self.widget)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
myMainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(myMainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
myMainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(myMainWindow)
self.statusbar.setObjectName("statusbar")
myMainWindow.setStatusBar(self.statusbar) self.retranslateUi(myMainWindow)
QtCore.QMetaObject.connectSlotsByName(myMainWindow) def retranslateUi(self, myMainWindow):
_translate = QtCore.QCoreApplication.translate
myMainWindow.setWindowTitle(_translate("myMainWindow", "MainWindow"))
self.pushButton.setText(_translate("myMainWindow", "Confirm"))

  

QpushButton 和 QlineEdit 构建时父对象都是 QWidget 布局对象 QHBoxLayout 也是。

2.2 使用容器进行布局

在左侧 Containers 拖入一个 frame 控件,然后放入 LineEdit 、 Button 控件。

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_myMainWindow(object):
def setupUi(self, myMainWindow):
myMainWindow.setObjectName("myMainWindow")
myMainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(myMainWindow)
self.centralwidget.setObjectName("centralwidget")
self.frame = QtWidgets.QFrame(self.centralwidget)
self.frame.setGeometry(QtCore.QRect(170, 270, 411, 161))
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.lineEdit = QtWidgets.QLineEdit(self.frame)
self.lineEdit.setGeometry(QtCore.QRect(20, 50, 214, 20))
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.frame)
self.pushButton.setGeometry(QtCore.QRect(280, 50, 75, 23))
self.pushButton.setObjectName("pushButton")
myMainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(myMainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
myMainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(myMainWindow)
self.statusbar.setObjectName("statusbar")
myMainWindow.setStatusBar(self.statusbar) self.retranslateUi(myMainWindow)
QtCore.QMetaObject.connectSlotsByName(myMainWindow) def retranslateUi(self, myMainWindow):
_translate = QtCore.QCoreApplication.translate
myMainWindow.setWindowTitle(_translate("myMainWindow", "MainWindow"))
self.pushButton.setText(_translate("myMainWindow", "Confirm"))

容器Qframe 与子控件之间有一个 QHBoxLayout,使用容器进行控件布局本质上还是调用布局管理器进行的。

Qt Designer 的使用的更多相关文章

  1. Qt Designer 修改窗体大小改变控件位置

    一.新建一个窗体 用qt designer 新建一个QWidget窗体, 在窗体中右键 选择布局, 发现布局是选择不了的,这个是因为窗体里面没有添加控件, 任意添加空间后便可选择 右键-- 布局-- ...

  2. Qt Designer怎样加入资源文件

    Qt Designer中如果在设计UI界面的时候要加入一些图素,图标等资源的时候是不能直接添加进去的,需要在Qt开发目录下编写QRC文件 qrc文件格式如下: <RCC> <qres ...

  3. 编写Qt Designer自定义控件(二)——编写自定义控件界面

    接上文:编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件 既然是控件,就应该有界面,默认生成的控件类只是一个继承了QWidget的类,如下: #ifndef LOGLATED ...

  4. 编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件

    在使用Qt Designer设计窗体界面时,我们可以使用Widget Box里的窗体控件非常方便的绘制界面,比如拖进去一个按钮,一个文本编辑器等.虽然Qt Designer里的控件可以满足我们大部分的 ...

  5. Qt之自定义插件(for Qt Designer)

    之前Blog里面有关于QWT的编译.配置.使用的文章,分别是在VS与Creator下进行的. QWT编译.配置.使用(VS2010 + Qt5.1.0). QWT编译.配置.使用(Qt Creator ...

  6. 自定义的插件如何加载到Qt Designer中(详细)

    要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:“升级(promotion) ...

  7. 把自定义控件集成到Qt Designer中

    要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:“升级(promotion) ...

  8. Qt 4.6: A Quick Start to Qt Designer

    Qt 4.6: A Quick Start to Qt Designer A Quick Start to Qt Designer Using Qt Designer involves four ba ...

  9. pyqt5 在qt designer后以弹窗的方式连接多个UI图形界面

    当我们通过pyqt开发时,eric6为我们提供了一个方便的工具:图形化的绘制UI工具--qt designer. 我们可以通过它开发多个UI,然后利用信号-槽工具,将功能代码附着在上面.也可以将多个界 ...

  10. QWT与QT Designer

    QWT是一套非常不错的开发库,它能结合QT开发,做出非常好的曲线,刻度,表盘等效果来.  qwt的下载以及动态链接库的编译等这里就不做介绍了.在源码目录下可以找到designer目录,其中有插件的源码 ...

随机推荐

  1. Week7阅读笔记

    关于银弹: Brooks在他最著名的这篇文章里指出,在软件开发过程里是没有万能的终杀性武器的,只有各种方法综合运用,才是解决之道.而各种声称如何如何神奇的理论或方法,都不是能杀死“软件危机”这头人狼的 ...

  2. JavaScript —— 数组

    Array方法 1.查找元素 indexOf()用来查找传进来的参数在目标数组中是否存在.如果目标数组包含该参数,就返回该元素在数组中的索引:如果不包含,就返回-1. 如果数组中包含多个相同的元素,i ...

  3. 现代程序设计 homework-01

    搞了6个小时individual project...看看博客做一做第一次现代程序设计作业 1) 建立 GitHub 账户, 把课上做的 “最大子数组之和” 程序签入 我的github地址是https ...

  4. vim鼠标模式打开与关闭

    开启鼠标模式 :set mouse=x, x取值如下, 例如:set mouse=a, 开启所有模式的mouse支持 n 普通模式    v 可视模式    i 插入模式    c 命令行模式    ...

  5. ubuntu解压zip文件

    step1 # 安装解压软件 sudo apt-get install unzip step # 2 解压文件 unzip xxxxx.zip

  6. Linux管理用户和组

    用户管理相关命令useradd        添加用户adduser        添加用户userdel         删除用户passwd         为用户设置密码usermod      ...

  7. BZOJ4445 SCOI2015小凸想跑步(半平面交)

    考虑怎样的点满足条件.设其为(xp,yp),则要满足(x0-xp,y0-yp)×(x1-xp,y1-yp)<=(xi-xp,yi-yp)×(xi+1-xp,yi+1-yp)对任意i成立.拆开式子 ...

  8. Harmonic Number (II) LightOJ - 1245 (找规律?。。。)

    题意: 求前n项的n/i  的和 只取整数部分 暴力肯定超时...然后 ...现在的人真聪明...我真蠢 觉得还是别人的题意比较清晰 比如n=100的话,i=4时n/i等于25,i=5时n/i等于20 ...

  9. C/C++ 各种进制的表示方法/ 进制前缀

    C/C++ 各种进制的表示方法/ 进制前缀 来源 https://blog.csdn.net/qq_38282836/article/details/81784112 在C/C++ 中天然的支持除10 ...

  10. Android 设置Activity样式 透明度

    一.设置Activity透明度有几种方法:1>.在清单文件中配置Activity时声明android:theme="@android:style/Theme.Translucent&q ...