Initial commit

This commit is contained in:
Jcen 2024-10-04 13:00:37 +08:00
parent f6c8fac77f
commit 3ec524b52e
7 changed files with 4566 additions and 0 deletions

106
lesson1/QML.py Normal file
View File

@ -0,0 +1,106 @@
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtQuickWidgets import QQuickWidget
from PyQt5.QtCore import QUrl, pyqtSignal, pyqtSlot
from PyQt5.QtCore import *
class Widget(QWidget):
sigSendToQml = pyqtSignal(str)
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle('Qt UI Demo')
self.setGeometry(100, 100, 640, 480)
# self.setStyleSheet("QWidget {background-color: transparent; border: 2px solid black; border-radius: 10px;}")
# self.setWindowFlags(Qt.FramelessWindowHint)
layout = QVBoxLayout()
self.L = QListWidget()
layout.addWidget(self.L)
self.quickWidget = QQuickWidget()
self.quickWidget.setFocus()
self.quickWidget.setResizeMode(QQuickWidget.SizeRootObjectToView)
self.quickWidget.setSource(QUrl('qml.qml'))
self.Ls = QListWidgetItem(self.L)
self.Ls.setSizeHint(self.quickWidget.sizeHint())
self.L.addItem(self.Ls)
self.L.setItemWidget(self.Ls, self.quickWidget)
self.quickWidget = QQuickWidget()
self.quickWidget.setFocus()
self.quickWidget.setResizeMode(QQuickWidget.SizeRootObjectToView)
self.quickWidget.setSource(QUrl('qml.qml'))
self.Ls = QListWidgetItem(self.L)
self.Ls.setSizeHint(self.quickWidget.sizeHint())
self.L.addItem(self.Ls)
self.L.setItemWidget(self.Ls, self.quickWidget)
# layout.addWidget(self.quickWidget)
self.lineEdit = QLineEdit()
layout.addWidget(self.lineEdit)
send_button = QPushButton('Send')
send_button.clicked.connect(self.on_send_clicked)
layout.addWidget(send_button)
self.setLayout(layout)
self.sigSendToQml.connect(self.quickWidget.rootObject().sigQmlReceiveStr)
self.quickWidget.rootObject().sigQmlSendStr.connect(self.slotReceiveFormQml)
@pyqtSlot()
def on_send_clicked(self):
self.sigSendToQml.emit(self.lineEdit.text())
@pyqtSlot(str)
def slotReceiveFormQml(self, string):
print('Received from QML:', string)
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = Widget()
widget.show()
sys.exit(app.exec_())
import QtQuick 2.9
import QtQuick.Controls 2.2
Rectangle {
id: root
width: 400
height: 300
color: "transparent" // 设置背景颜色
border.color: "red" // 设置边框颜色
border.width: 5 // 设置边框宽度
radius: 10 // 设置圆角半径
signal sigQmlReceiveStr(string str) //定义接收信号(from QWidget)
signal sigQmlSendStr(string str) //定义发送信号(to QWidget)
Image {
id: image
source: "https://tse4-mm.cn.bing.net/th/id/OIP-C.duz6S7Fvygrqd6Yj_DcXAQHaF7?rs=1&pid=ImgDetMain" // 设置图片URL
anchors.centerIn: parent
width: 200
height: 200
fillMode: Image.PreserveAspectFit // 设置图片填充模式
}
Text {
id: text
anchors.centerIn: parent
color: "red"
font.pixelSize: 100
text: qsTr("hello world!")
}
onSigQmlReceiveStr: { //信号对应槽函数
text.text = str
root.sigQmlSendStr("received: " + str) //调用信号
}
}

3150
lesson1/cv2流播放.py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,71 @@
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QListWidget, QListWidgetItem, QLabel
from PyQt5.QtCore import Qt, QMimeData
from PyQt5.QtGui import QDrag
class DragLabel(QLabel):
def __init__(self, text):
super().__init__(text)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
drag = QDrag(self)
mime_data = QMimeData()
mime_data.setText(self.text())
drag.setMimeData(mime_data)
drag.exec_(Qt.MoveAction)
class ListWidget(QListWidget):
def __init__(self):
super().__init__()
self.setAcceptDrops(True)
self.setDragEnabled(True)
self.setDragDropMode(QListWidget.InternalMove)
for i in range(10):
item = QListWidgetItem(self)
label = DragLabel(f'Label {i}')
item.setSizeHint(label.sizeHint())
self.setItemWidget(item, label)
def dragEnterEvent(self, event):
if event.mimeData().hasText():
event.accept()
else:
event.ignore()
def dropEvent(self, event):
text = event.mimeData().text()
item = QListWidgetItem(self)
label = DragLabel(text)
item.setSizeHint(label.sizeHint())
self.setItemWidget(item, label)
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
list_widget1 = ListWidget()
list_widget2 = ListWidget()
self.setGeometry(300, 300, 500, 200)
self.setWindowTitle('Drag and Drop Example')
layout = QHBoxLayout()
layout.addWidget(list_widget1)
layout.addWidget(list_widget2)
self.setLayout(layout)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
sys.exit(app.exec_())

69
lesson1/maya_qt.py Normal file
View File

@ -0,0 +1,69 @@
# -*- coding: utf-8 -*-
from maya import OpenMaya, mel, cmds
import pymel.core as pm
import pymel.core as pm
from maya import cmds, mel, utils, OpenMaya
import os
import sys
from PySide6.QtCore import Qt, QByteArray
from PySide6.QtWidgets import QApplication, QMainWindow, QDockWidget, QListWidget, QTextEdit, QPushButton, QWidget
from PySide6.QtCore import QSettings, QDataStream
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setObjectName('MainWindow')
b = QPushButton('此为中央控件,点击保存布局')
b.clicked.connect(self.save_layout)
self.setCentralWidget(b)
self.setWindowTitle('Dock 例子')
self.load_layout()
def save_layout(self):
settings = QSettings(r"C:\Users\Jcen\PycharmProjects\pythonProject\settings.ini", QSettings.IniFormat)
settings.setValue("geometry", self.saveGeometry())
settings.setValue("state", self.saveState())
settings.beginGroup("dockWidgets")
dock_widgets = self.findChildren(QDockWidget)
for dock_widget in dock_widgets:
settings.setValue("%s%s" % (dock_widget.windowTitle(), dock_widget.objectName()), dock_widget.saveGeometry())
def load_layout(self):
settings = QSettings(r"C:\Users\Jcen\PycharmProjects\pythonProject\settings.ini", QSettings.IniFormat)
settings.beginGroup("dockWidgets")
for key in settings.allKeys():
self.items = QDockWidget('%s' % (key[:-1]), self)
self.items.setObjectName('%s' % (key[-1:]))
self.addDockWidget(Qt.RightDockWidgetArea, self.items)
settings.endGroup()
self.restoreGeometry(settings.value("geometry"))
self.restoreState(settings.value("state"))
def create_tab(
dock_name,
widget,
label='WidgetLabel',
dockTab='Channel Box / Layer Editor'
):
cmds.workspaceControl(dock_name, uiScript='', label=label)
cmds.control(str(widget.objectName()), e=True, p=dock_name)
tab_result = mel.eval('getUIComponentDockControl("{}", false)'.format(dockTab))
cmds.workspaceControl(dock_name, e=True, tabToControl=(tab_result, -1))
if OpenMaya.MGlobal.mayaState() == OpenMaya.MGlobal.kInteractive:
# create project manager tab
mayaProjectManager = MainWindow()
create_tab(
'ProjectManagerDock1201111',
mayaProjectManager,
label='Project Manager'
)

View File

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
import sys
import traceback
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QTextEdit
from PyQt5.QtCore import Qt
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Error Handling Example")
self.setGeometry(100, 100, 800, 600)
# 创建布局和文本编辑部件
layout = QVBoxLayout()
self.text_edit = QTextEdit()
# 将文本编辑部件添加到布局中
layout.addWidget(self.text_edit)
# 创建一个小部件并将布局设置为其布局
widget = QWidget()
widget.setLayout(layout)
# 将小部件设置为主窗口的中央部件
self.setCentralWidget(widget)
# 重定向错误输出到文本编辑部件
sys.excepthook = self.handle_exception
# 设置文本编辑部件为只读
self.text_edit.setReadOnly(True)
def handle_exception(self, exc_type, exc_value, exc_traceback):
# 将错误信息输出到文本编辑部件
error_message = ''.join(traceback.format_exception(exc_type, exc_value, exc_traceback))
self.text_edit.append(error_message)
if __name__ == "__main__":
app = QApplication([])
window = MyWindow()
window.show()
# 产生一个错误
print(1 / 0)
app.exec_()

1121
lesson1/qt6截屏.py Normal file

File diff suppressed because it is too large Load Diff

2
lesson1/链接.py Normal file
View File

@ -0,0 +1,2 @@
# -*- coding: utf-8 -*-
create_action.triggered.connect(functools.partial(self.create_action_func, i))