簡體   English   中英

pyside2如何查詢、創建和刪除動態小部件

[英]pyside2 how to query and create and delete dynamic widget

布局

  • 布局 (1)

    • Qline編輯

    • Q按鈕

  • 布局 (2)

    • Qline編輯

    • Q按鈕

  • Q按鈕 (3)

我嘗試在布局中創建和刪除布局(1,2)。

這是實時工作。 layout(1,2) 是動態數 (1,2,3,~~)

Qpushbutton 單擊 -> 父布局和小部件刪除

並在 QlineEdit 中查詢文本

我的測試代碼——

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

import maya.cmds as mc
import os
import pprint

from PySide2 import QtWidgets, QtCore, QtGui

class PreferenceUI(QtWidgets.QDialog):

    def __init__(self):
        super(PreferenceUI, self).__init__()

        self.setWindowTitle("preference")
        self.create_widgets()
        self.create_layouts()
        self.create_connections()
        self.load_department()

    def create_widgets(self):
        self.departmentNameLine = QtWidgets.QLineEdit()
        self.departmentNameLine.setFixedSize(100,20)
        self.departmentPathLine = QtWidgets.QLineEdit()
        self.departmentMinusBtn = QtWidgets.QPushButton("-")
        self.departmentMinusBtn.setFixedSize(20,20)

        self.departmentPlusBtn = QtWidgets.QPushButton("+")

        self.sysAppendWidget = QtWidgets.QTextEdit()

    def create_layouts(self):
        self.mainLayout = QtWidgets.QFormLayout(self)
        self.departmentLayout = QtWidgets.QVBoxLayout()

        self.departmentLastLayout = QtWidgets.QHBoxLayout()
        self.departmentLayout.addLayout(self.departmentLastLayout)
        self.departmentLayout.addWidget(self.departmentPlusBtn)

        self.mainLayout.addRow("department :", self.departmentLayout)
        self.mainLayout.insertRow(self.mainLayout.count()-1, "sys.path.append :", self.sysAppendWidget)

    def create_connections(self):
        pass

    def load_department(self):
        self.departmentPlusBtn.setParent(None)

        jsonDict = {"department": [["temp", "tempPath"], ["temp2", "temp2Path"]]}
        for i in range(len(jsonDict["department"])):
            layout = QtWidgets.QHBoxLayout()
            self.departmentLayout.addLayout(layout)

            departmentNameLine = QtWidgets.QLineEdit()
            departmentNameLine.setText(jsonDict["department"][i][0])
            departmentNameLine.setFixedSize(100,20)

            departmentPathLine = QtWidgets.QLineEdit()
            departmentPathLine.setText(jsonDict["department"][i][1])

            departmentMinusBtn = QtWidgets.QPushButton("-")
            departmentMinusBtn.setFixedSize(20,20)
            cnt = self.departmentLayout.count()
            departmentMinusBtn.clicked.connect(lambda x:self.remove_department(cnt))

            layout.addWidget(departmentNameLine)
            layout.addWidget(departmentPathLine)
            layout.addWidget(departmentMinusBtn)
        self.departmentLayout.insertWidget(self.departmentLayout.count(), self.departmentPlusBtn)

    def remove_department(self, index):
        print index
        print self.departmentLayout.children()[0].layout().children()

if __name__ == "__main__":
    try:
        ui.close
    except:
        pass
    ui = PreferenceUI()
    ui.show()

在此處輸入圖片說明

我想要

  1. 添加路徑線

  2. 刪除路徑行

  3. 查詢部門名稱行、部門路徑行文本

我嘗試 ↑,但失敗

我嘗試在瑪雅

為了保持邏輯整潔,我創建了一個表示行的類,然后將行存儲在列表中以獲取文本或刪除行,如下所示:

from functools import partial

from PySide2 import QtWidgets, QtCore, QtGui


class Widget(QtWidgets.QWidget):
    def __init__(self, text1, text2, parent=None):
        super().__init__(parent)
        self.departmentNameLine = QtWidgets.QLineEdit(text1)
        self.departmentNameLine.setFixedSize(100, 20)
        self.departmentPathLine = QtWidgets.QLineEdit(text2)
        self.departmentMinusBtn = QtWidgets.QPushButton("-")
        self.departmentMinusBtn.setFixedSize(20, 20)
        self.setContentsMargins(0, 0, 0, 0)
        layout = QtWidgets.QHBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.departmentNameLine)
        layout.addWidget(self.departmentPathLine)
        layout.addWidget(self.departmentMinusBtn)


class PreferenceUI(QtWidgets.QDialog):
    def __init__(self):
        super(PreferenceUI, self).__init__()

        self.widgets = []

        self.setWindowTitle("preference")
        self.create_widgets()
        self.create_layouts()
        self.create_connections()
        self.load_department()

    def create_widgets(self):
        self.departmentPlusBtn = QtWidgets.QPushButton("+")
        self.sysAppendWidget = QtWidgets.QTextEdit()

    def create_layouts(self):
        self.mainLayout = QtWidgets.QFormLayout(self)
        self.departmentLayout = QtWidgets.QVBoxLayout()

        self.departmentLastLayout = QtWidgets.QHBoxLayout()
        self.departmentLayout.addLayout(self.departmentLastLayout)
        self.departmentLayout.addWidget(self.departmentPlusBtn)

        self.mainLayout.addRow("department :", self.departmentLayout)
        self.mainLayout.insertRow(
            self.mainLayout.count() - 1, "sys.path.append :", self.sysAppendWidget
        )

    def create_connections(self):
        self.departmentPlusBtn.clicked.connect(self.add_row)

    def load_department(self):
        jsonDict = {"department": [["temp", "tempPath"], ["temp2", "temp2Path"]]}
        for text1, text2 in jsonDict["department"]:
            self.create_row(text1, text2)

    def save_departament(self):
        l = []
        for widget in self.widgets:
            l.append([self.departmentNameLine.text(), self.departmentPathLine.text()])
        jsonDict = {"department": l}
        print(jsonDict)

    def add_row(self):
        self.create_row("text1", "text2")

    def create_row(self, text1="", text2=""):
        widget = Widget(text1, text2)
        widget.departmentMinusBtn.clicked.connect(partial(self.delete, widget))
        self.departmentLayout.addWidget(widget)
        self.widgets.append(widget)

    def delete(self, widget):
        if widget in self.widgets:
            self.widgets.remove(widget)
        widget.deleteLater()


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)

    w = PreferenceUI()
    w.show()

    sys.exit(app.exec_())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM