Как можно соединить два разных виджета с PySide?

У меня есть два разных виджета, один из 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()

Я работал в Nuke вы можете добавить аргумент QApplicaiton. Также я хочу, чтобы, когда я нажимал кнопку OK в виджете pm_select_path, я хотел, чтобы мой QMainWindow что-то сделал. Я хочу соединить два разных.py виджета. Кроме того, какой метод я должен использовать? Thnax.

0 ответов

Другие вопросы по тегам