PyQt4 / PyQt5
Python事多,做个笔记,区分。
PySide2 Signal Slot Test
from PySide2.QtWidgets import QMainWindow,QApplication,QWidget,QPushButton
from PySide2 import QtWidgets
from PySide2.QtCore import Slot, Signal import sys class MyCenWidget(QWidget): closeSignal = Signal() quitSignal = Signal() def __init__(self,parent = None):
super(MyCenWidget, self).__init__(parent)
# first create layout
self.createAndSetLayout()
# add widget to my layout
self.createButtons() def createAndSetLayout(self):
self.mainLayout = QtWidgets.QHBoxLayout()
self.setLayout(self.mainLayout) def createButtons(self):
self.closeBtn = QPushButton(self)
self.closeBtn.setText("Close")
self.closeBtn.clicked.connect(self.closeSignal) # 信号连接信号
self.mainLayout.addWidget(self.closeBtn) # Quit button settings
self.quitBtn = QPushButton(self)
self.quitBtn.setText("Quit")
self.quitBtn.clicked.connect(self.quitSlot)
self.mainLayout.addWidget(self.quitBtn) def quitSlot(self):
print("我的中心控件点了quit button")
self.quitSignal.emit() class MyWindow(QMainWindow):
def __init__(self):
super(MyWindow, self).__init__() # create my widget
self.setupMenuBar()
# bind my widget to function
self.accessMenuBar() # take my widget to here
cenWidget = MyCenWidget() # 野指针
cenWidget.closeSignal.connect(self.close) # 从我定义的窗口里发射的信号,这个是closeSignal
cenWidget.quitSignal.connect(self.close) self.setCentralWidget(cenWidget) # 基类有个函数让我设置它到我的QMainWindow def setupMenuBar(self):
parentMenuBar = self.menuBar() fileMenu = parentMenuBar.addMenu("File")
self.newAction = fileMenu.addAction("new") editMenu = parentMenuBar.addMenu("Edit")
self.undoAction = editMenu.addAction("undo") # make connection new action
def accessMenuBar(self):
self.newAction.triggered.connect(self.newSlot) @Slot(bool)
def newSlot(self, checked):
print("into my new slot") if __name__ == "__main__":
app = QApplication(sys.argv)
print("My window argv:", sys.argv)
w = MyWindow()
w.show()
app.exec_()
PyQt5 Reference Guide
http://pyqt.sourceforge.net/Docs/PyQt5/index.html
Qt4 signal:
class CopyFileThread(QtCore.QThread):
signal_process = QtCore.pyqtSignal(str, str, bool) def __init__(self, parent=None):
super(CopyFileThread, self).__init__(parent)
self.finished.connect(self.taskEnd) def setSourceAndDestination(self, src, des):
self.source = src
self.des = des
self.status = False def run(self):
#print "copy -> ", self.source, self.des
# QtCore.QFile.copy(self.source,self.des)
try:
shutil.copy(self.source, self.des)
self.status = True
except:
self.status = False def taskEnd(self):
self.signal_process.emit(self.source, self.des, self.status)
接受这个signal槽:
@QtCore.pyqtSlot(str, str, bool)
def perThreadCopyEnd(self, src, des, status):
self.taskNum += 1
if (status):
self.throwMessage(">>" + src + "\t->->->->\t" + des + "<<copy end")
else:
self.throwMessage(">>" + src + "\tT_T T_T T_T\t" + des + "<<copy failed")
if self.taskNum == len(self.sources):
self.throwMessage(">> process end")
Qt5展示的一些发射信号:
from PyQt5.QtCore import QObject, pyqtSignal class Foo(QObject): # Define a new signal called 'trigger' that has no arguments.
trigger = pyqtSignal() def connect_and_emit_trigger(self):
# Connect the trigger signal to a slot.
self.trigger.connect(self.handle_trigger) # Emit the signal.
self.trigger.emit() def handle_trigger(self):
# Show that the slot has been called. print "trigger signal received"
信号重载
from PyQt5.QtWidgets import QComboBox class Bar(QComboBox): def connect_activated(self):
# The PyQt5 documentation will define what the default overload is.
# In this case it is the overload with the single integer argument.
self.activated.connect(self.handle_int) # For non-default overloads we have to specify which we want to
# connect. In this case the one with the single string argument.
# (Note that we could also explicitly specify the default if we
# wanted to.)
self.activated[str].connect(self.handle_string) def handle_int(self, index):
print "activated signal passed integer", index def handle_string(self, text):
print "activated signal passed QString", text
QML:
<1> show 一个qml里的window
import QtQuick 2.0
import QtQuick.Window 2.2
import QtQuick.Controls 1
import QtQuick.Dialogs 1.2 Window
{
id:root
width:1280
height:720
Rectangle
{
id:rec
color:"#FF2020"
width:100
height:100
anchors.centerIn:parent
border.color:"#202020"
border.width:1
}
MouseArea
{
id:quitArea
anchors.fill:
{
rec
}
onClicked:
{
close()
}
} }
main.py:
from PyQt5 import QtWidgets,QtGui,QtCore
from PyQt5 import QtQml
from PyQt5.QtQuick import QQuickView,QQuickWindow import sys
if __name__ == "__main__":
app = QtGui.QGuiApplication(sys.argv) eng = QtQml.QQmlApplicationEngine()
eng.load(QtCore.QUrl.fromLocalFile('./UI/main.qml')) topLevel = eng.rootObjects()[0]
print topLevel
topLevel.show() app.exec_()
创建混合窗口:
按钮是QPushButton,下面的白色区域是QtQuickWindow
from PyQt5 import QtWidgets,QtGui,QtCore
from PyQt5 import QtQml
from PyQt5.QtQuick import QQuickView,QQuickWindow import sys
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv) eng = QtQml.QQmlApplicationEngine() eng.load(QtCore.QUrl.fromLocalFile('./UI/Main.qml')) topLevel = eng.rootObjects()[0]
print topLevel
#topLevel.show() layout = QtWidgets.QVBoxLayout()
button = QtWidgets.QPushButton()
button.setText("houdini")
layout.addWidget(button) mainWidget = QtWidgets.QWidget() quickWidget = QtWidgets.QWidget.createWindowContainer(topLevel)
#quickWidget.show()
mainWidget.setLayout(layout)
layout.addWidget(quickWidget)
mainWidget.show()
app.exec_()
PyQt4 / PyQt5的更多相关文章
- Python pyQt4/PyQt5 学习笔记3(绝对对位,盒布局,网格布局)
本节研究布局管理的内容. (一)绝对对位 import sys from PyQt4 import QtGui class Example(QtGui.QWidget): def __init__( ...
- Python pyQt4/pyQt5 学习笔记2(状态栏、菜单栏和工具栏)
例子:状态栏.菜单栏和工具栏 import sys from PyQt4 import QtGui class Example(QtGui.QMainWindow): def __init__(sel ...
- Python pyQt4/pyQt5 学习笔记1(空白窗口,按钮,控件事件,控件提示,窗体显示到屏幕中间,messagebox)
PyQt4是用来编写有图形界面程序(GUI applications)的一个工具包.PyQt4作为一个Python模块来使用,它有440个类和超过6000种函数和方法.同时它也是一个可以在几乎所有主流 ...
- Python pyQt4/PyQt5 学习笔记4(事件和信号)
信号 & 槽 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QWidget,QLCDNumber,QS ...
- PyQt 5.4参考指南 ---- PyQt5和PyQt4之间的差异
欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/in ...
- PyQt5初识
学习PyQt5是个机缘,那是因为我的linux16.04+python3.6使了浑身解数也装不上PyQt4! PyQt5的官方文档貌似是要钱的!又想快速了解这个东东,我还是借鉴了万能的博客园大佬博主: ...
- GUI1_综合介绍
最终比较,选择pyqt用于GUI开发 https://pythonspot.com/en/gui/ 图形化界面可以使用PyQt5, PyQt4, wxPython or Tk.模板 Graphical ...
- 共有49款Windows GUI开发框架开源软件 【转】
源文 : http://www.oschina.net/project/tag/178/gui?lang=36&os=0&sort=view&p=1 桌面应用开发引擎 Allo ...
- 【pyqtgraph绘图】安装pyqtgraph
解读官方API-安装 安装 参考:http://www.pyqtgraph.org/documentation/installation.html 根据您的需要,有许多不同的方式来安装pyqtgrap ...
随机推荐
- VM中的Linux如何设置共享文件夹
1.点击[编辑虚拟机设置]-[选项]-[共享文件夹],选择“总是启用” 2.点击[确定],并重启系统,已经设置好了
- mac设计师系列 Adobe “全家桶” 15款设计软件 值得收藏!
文章素材来源:风云社区.简书 文章收录于:风云社区 www.scoee.com,提供1700多款mac软件下载 Adobe Creative Cloud 全线产品均可开放下载(简称Adobe CC 全 ...
- go kafka
安装导入 go get github.com/Shopify/sarama import "github.com/Shopify/sarama" 使用 1.同步生产者 packag ...
- ElasticSearch的API介绍
ElasticSearch的API介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ES是基于Restful风格 1>ES是基于Restful风格 Elasticsea ...
- Tensorflow做阅读理解与完形填空
catalogue . 前言 . 使用的数据集 . 数据预处理 . 训练 . 测试模型运行结果: 进行实际完形填空 0. 前言 开始写这篇文章的时候是晚上12点,突然想到几点新的理解,赶紧记下来.我们 ...
- MyBatis-获取 xxxMapper
Main 方法,mybatis 版本为 3.5.0 使用 MapperProxyFactory 创建一个 MapperProxy 的代理对象 代理对象里面包含了 DefaultSqlSession(E ...
- Kafka技术内幕 读书笔记之(四) 新消费者——心跳任务
消费者拉取数据是在拉取器中完成的,发送心跳是在消费者的协调者上完成的,但并不是说拉取器和消费者的协调者就没有关联关系 . “消费者的协调者”的作用是确保客户端的消费者和服务端的协调者之间的正常通信,如 ...
- Kafka权威指南 读书笔记之(三)Kafka 生产者一一向 Kafka 写入数据
不管是把 Kafka 作为消息队列.消息总线还是数据存储平台来使用 ,总是需要有一个可以往 Kafka 写入数据的生产者和一个从 Kafka 读取数据的消费者,或者一个兼具两种角色的应用程序. 开发者 ...
- linux chmod命令使用
chmod:更改文件9个属性 Linux文件属性有两种设置方法,一种是数字,一种是符号. Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/wri ...
- Problems found loading plugins: Plugin "GlassFish Integration" was not loaded: required plugin "Java EE: EJB, JPA, Servlets" is disabled.
idea启动报错:并且无法部署web项目 Problems found loading plugins: Plugin "GlassFish Integration" was no ...