Qt Designer 的使用
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 的使用的更多相关文章
- Qt Designer 修改窗体大小改变控件位置
一.新建一个窗体 用qt designer 新建一个QWidget窗体, 在窗体中右键 选择布局, 发现布局是选择不了的,这个是因为窗体里面没有添加控件, 任意添加空间后便可选择 右键-- 布局-- ...
- Qt Designer怎样加入资源文件
Qt Designer中如果在设计UI界面的时候要加入一些图素,图标等资源的时候是不能直接添加进去的,需要在Qt开发目录下编写QRC文件 qrc文件格式如下: <RCC> <qres ...
- 编写Qt Designer自定义控件(二)——编写自定义控件界面
接上文:编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件 既然是控件,就应该有界面,默认生成的控件类只是一个继承了QWidget的类,如下: #ifndef LOGLATED ...
- 编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件
在使用Qt Designer设计窗体界面时,我们可以使用Widget Box里的窗体控件非常方便的绘制界面,比如拖进去一个按钮,一个文本编辑器等.虽然Qt Designer里的控件可以满足我们大部分的 ...
- Qt之自定义插件(for Qt Designer)
之前Blog里面有关于QWT的编译.配置.使用的文章,分别是在VS与Creator下进行的. QWT编译.配置.使用(VS2010 + Qt5.1.0). QWT编译.配置.使用(Qt Creator ...
- 自定义的插件如何加载到Qt Designer中(详细)
要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:“升级(promotion) ...
- 把自定义控件集成到Qt Designer中
要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在.有两种方法可以把新自定义控件的信息通知给Qt Designer:“升级(promotion) ...
- 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 ...
- pyqt5 在qt designer后以弹窗的方式连接多个UI图形界面
当我们通过pyqt开发时,eric6为我们提供了一个方便的工具:图形化的绘制UI工具--qt designer. 我们可以通过它开发多个UI,然后利用信号-槽工具,将功能代码附着在上面.也可以将多个界 ...
- QWT与QT Designer
QWT是一套非常不错的开发库,它能结合QT开发,做出非常好的曲线,刻度,表盘等效果来. qwt的下载以及动态链接库的编译等这里就不做介绍了.在源码目录下可以找到designer目录,其中有插件的源码 ...
随机推荐
- 个人博客作业_week1
1.<构建之法>的5个问题 1.如何避免在产品开发后期不断有重大修改,导致其他模块的连锁反应? 2.游戏用户有哪些类型? 3.如何衡量软件工程的质量? 4.怎么协调团队里相互间的任务分配? ...
- 我的Android之路——底部菜单栏的实现
底部菜单栏的实现 底部菜单栏两种实现方法:ViewPager:可滑动的界面:Fragment:固定的界面. 首先,页面布局,在除去顶部toolbar之后,将主界面分为两部分,一部分为界面显示区,另一部 ...
- SE Springer小组之《Spring音乐播放器》需求分析说明书一
软件需求说明书 软件需求说明书的编制是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解, 使之成为整个开发工作的基础. 1 引言 1.1编写目的 使用户对该软件的初始规定有一个理解,也使软 ...
- format()函数用法
基本语法是通过 {} 和 : 来代替以前的 % . format 函数可以接受不限个参数,位置可以不按顺序. 直接打印输出参数: 通过字典设置参数: 通过列表索引设置参数:
- 博客用Markdown编辑器插入视频
要展示一些App的效果用或者更方便地展示工具的操作,可以使用视频. 以下有两种方式可以在博客中插入视频 第一种 此方法适用于插入来源优酷的视频或者你自己录制了视频上传到优酷,这种方法的好处是可以插入时 ...
- Vert.x简介
https://vertx.io/ https://vertx.io/download/ https://baike.baidu.com/item/Vert.x 近年来,移动网络.社交网络和电商的兴起 ...
- Spring中 @Autowired标签与 @Resource标签 的区别
http://blog.csdn.net/angus_17/article/details/7543478 http://bbs.csdn.net/topics/390175654 https://w ...
- HTTP Client使用总结
1.如果服务器使用HTTPS协议,使用HTTPClient的话,需要配以EasySSLProtocolSocketFactory 2.Tomcat对HTTP的Post和Get请求处理是不一样的.Spr ...
- 深入理解nodejs的next函数。koa的使用 app.params的使用
next就是一个递归函数 const Koa = require('koa'); const app = new Koa(); app.use(ctx => { ctx.body = 'Hell ...
- [转帖]Tensor是神马?为什么还会Flow?
Tensor是神马?为什么还会Flow? 互联网爱好者 百家号17-05-2310:03 大数据文摘作品,转载要求见文末 编译 | 邵胖胖,江凡,笪洁琼,Aileen 也许你已经下载了TensorFl ...