如何使用PySide连接两个不同的小部件?

时间:2018-08-09 12:28:18

标签: python pyside nuke

我有两个不同的小部件,一个QMainWindow和另一个Qwidget,如图所示。因此,当我单击“确定”按钮时,我要QmainWindow做某事。

这是屏幕截图

pm_main_window.py

from PySide.QtGui import *
from PySide.QtCore import *
import os,sys
import pm_create_personal as pm_CreatePersonal
import pm_select_path as pm_selectPath


class projectManagerCentralWidget(QWidget):
    def __init__(self):
        super(projectManagerCentralWidget, self).__init__()

        self.projectComboMenu = QComboBox()
        self.projectComboMenu.setFixedWidth(175)


        self.shotList = QListWidget()
        self.shotList.setFixedWidth(175)
        items = ["Shot001", "Shot002", "Shot003"]
        self.shotList.addItems(items)

        self.searchInShot = QLineEdit()
        self.searchInShot.setFixedWidth(175)
        self.searchInShot.setPlaceholderText("Search Shot")

        self.saveAs = QPushButton("Save As")
        self.saveAs.setFixedWidth(120)
        self.saveAs.clicked.connect(self.strr)

        self.openAs = QPushButton("Open")
        self.openAs.setFixedWidth(120)

        self.importBtn = QPushButton("Import")
        self.importBtn.setFixedWidth(120)


        self.personal = QComboBox()
        self.personal.addItem("Name Here!")
        self.personal.setFixedWidth(175)

        self.compFileListTree = QTreeWidget()
        self.compFileListTree.setHeaderLabels(["Comp Name","Operator","Starting Date", "Comment"])


        self.mainLayout = QHBoxLayout()

        self.projectListLayout = QVBoxLayout()
        self.projectListLayout.addWidget(self.projectComboMenu)
        self.projectListLayout.addWidget(self.shotList)
        self.projectListLayout.addWidget(self.searchInShot)

        self.openClosePersonLayout = QHBoxLayout()
        self.openClosePersonLayout.addWidget(self.saveAs)
        self.openClosePersonLayout.addWidget(self.openAs)
        self.openClosePersonLayout.addWidget(self.importBtn)
        self.openClosePersonLayout.addWidget(self.personal)

        self.mainLayout.addLayout(self.projectListLayout)
        self.buttonsPersonCompsLayout = QVBoxLayout()
        self.buttonsPersonCompsLayout.addLayout(self.openClosePersonLayout)
        self.buttonsPersonCompsLayout.addWidget(self.compFileListTree)
        self.mainLayout.addLayout(self.buttonsPersonCompsLayout)
        self.setLayout(self.mainLayout)


    def strr(self):
        pass
        # sR = open("F:/selectedRoot.txt", "r")
        # readProjectPath = sR.readline()
        # print "ComboBox Root :" + readProjectPath
        # listOfCombo = os.listdir(readProjectPath)
        # for comboList in listOfCombo:
        #     self.projectComboMenu.addItems([comboList])
        #     print "Project list: " + comboList


class projectManager(QMainWindow):
    def __init__(self):
        super(projectManager, self).__init__()
        self.setCentralWidget(projectManagerCentralWidget())
        topMenuBar = self.menuBar()
        exitAction = QAction("&Exit",self)
        exitAction.setShortcut("ESC")
        exitAction.triggered.connect(self.close)

        createPerson = QAction("&Create Person", self)
        createPerson.triggered.connect(pm_CreatePersonal.startCP)
        createPerson.setShortcut("C")

        slctProjectPath = QAction("&Change Root", self)
        slctProjectPath.setShortcut("S")
        slctProjectPath.triggered.connect(pm_selectPath.startSP)

        fileMenu = topMenuBar.addMenu("&File")
        fileMenu.addAction(slctProjectPath)
        fileMenu.addAction(createPerson)
        fileMenu.addAction(exitAction)


        helpMenu = topMenuBar.addMenu("&Help")

        self.statusBar().showMessage("Project Root: 'X:\PROJECTS\Deliler_fw21845'")



def startPM_MainWindow():
    startPM_MainWindow.pmWin = projectManager()
    startPM_MainWindow.pmWin.setWindowTitle("1000Volt: Project Manager for Nuke")
    startPM_MainWindow.pmWin.setMinimumSize(650, 500)
    startPM_MainWindow.pmWin.show()

pm_select_path.py

from PySide.QtGui import *
import os


class pm_selectProjectPath(QWidget):
    def __init__(self):
        super(pm_selectProjectPath, self).__init__()
        self.selectionPath = QLineEdit()



        self.selectPath = QPushButton("Select")
        self.selectPath.clicked.connect(self.selectDirAndCreateDB)


        self.OKAY = QPushButton("Ok")
        self.OKAY.clicked.connect(self.closePanel)

        self.Layout = QHBoxLayout()
        self.Layout.addWidget(self.selectionPath)
        self.Layout.addWidget(self.selectPath)
        self.Layout.addWidget(self.OKAY)
        self.setLayout(self.Layout)

    def selectDirAndCreateDB(self):
            selected_dir = QFileDialog.getExistingDirectory()
            print "Your project 'ROOT' is ::: " + selected_dir

            try:
                self.selectionPath.setText(selected_dir)
                sR = open("F:/selectedRoot.txt", "w")
            except:
                print "There is an Error!"

            if os.path.isfile("F:/selectedRoot.txt"):
                sR.write(selected_dir + "/")
                sR.close()
            else:
                print "Ther no writable directory!"

    def closePanel(self):
        self.close()


def startSP():
    startSP.pmPWindow = pm_selectProjectPath()
    startSP.pmPWindow.setWindowTitle("Select Root")
    startSP.pmPWindow.setFixedWidth(500)
    startSP.pmPWindow.show()

pm_create_personal.py

from PySide.QtGui import *
import sys

class pmPersonalCreation(QWidget):
    def __init__(self):
        super(pmPersonalCreation, self).__init__()

        self.personName = QLineEdit()
        self.personName.setPlaceholderText("Name / Surname")
        self.personPass = QLineEdit()
        self.personPass.setPlaceholderText("Password")
        self.personTitle = QLineEdit()
        self.personTitle.setPlaceholderText("employee title")

        self.personList = QTreeWidget()
        self.personList.setHeaderLabels(["Name", "Project"])

        self.createButton = QPushButton("Create")

        self.cencelBtn = QPushButton("Cencel")
        self.cencelBtn.clicked.connect(self.closeBtn)


        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.personName)
        self.mainLayout.addWidget(self.personPass)
        self.mainLayout.addWidget(self.personTitle)


        self.btnLay = QHBoxLayout()
        self.btnLay.addWidget(self.createButton)
        self.btnLay.addWidget(self.cencelBtn)
        self.mainLayout.addLayout(self.btnLay)
        self.mainLayout.addWidget(self.personList)
        self.setLayout(self.mainLayout)

    def closeBtn(self):
        self.close()
def startCP():
    startCP.pmPWindow = pmPersonalCreation()
    startCP.pmPWindow.setWindowTitle("Create Personal")
    startCP.pmPWindow.show()

我在核武器工作中可以添加QApplicaiton参数。另外,当我单击 pm_select_path 小部件中的“确定”按钮时,我还想让我的 QMainWindow 做某事。我想连接两个不同的.py小部件。 另外,我应该使用哪种方法? thnax。

0 个答案:

没有答案