Создайте другое окно того же класса в PySide - PullRequest
0 голосов
/ 15 мая 2018

Я создаю небольшую программу с графическим интерфейсом, используя PySide.У меня трудности с созданием другого объекта того же класса.Что именно я пытаюсь сделать, так это то, что при нажатии на кнопку в MainWindow он должен создать другое независимое окно того же класса.

import sys 
from PySide import QtCore, QtGui 

class Sticky(QtGui.QMainWindow):
    def __init__(self,parent = None):
        QtGui.QMainWindow.__init__(self,parent)
        self.initUI()

    def initUI(self):
        ....
        self.addToolBarElements()
        ....
        self.show()

    def addToolBarElements(self):
        ....
        self.newwindow = QtGui.QAction(QtGui.QIcon(os.path.join(os.path.dirname(__file__),'icons/new.png')),"New Note",self)
        self.newwindow.setStatusTip("New")
        self.newwindow.triggered.connect(newwindow)

        self.toolBar.addAction(self.newwindow)

    def newwindow(self):
        #how to create new object of same class

def run():
    app = QtGui.QApplication(sys.argv)
    notes = Sticky()
    sys.exit(app.exec_()) 

Вот что я пробовал:

У меня естьпробовал многопроцессорность, но я мало что понял.Я снова попытался вызвать метод run (), но он выдает ошибку.

1 Ответ

0 голосов
/ 15 мая 2018

Не вызывайте с одним и тем же именем 2 разных элемента, в вашем случае self.newwindow относится к QAction как к методу класса, избегайте его, это тип ошибки, которую легко совершить, но которую трудно найти.

Если перейти к сути, вам просто нужно создать новый объект класса, но проблема в том, что сборщик мусора устранит его, чтобы избежать этого, есть 2 возможных варианта, во-первых, сделать новый элемент окна класса, или второй сохранить его в списке, это тот, который я выбираю, потому что я думаю, что вы хотите иметь несколько окон.

import sys 
import os

from PySide import QtCore, QtGui 

class Sticky(QtGui.QMainWindow):
    def __init__(self,parent = None):
        QtGui.QMainWindow.__init__(self,parent)
        self.others_windows = []
        self.initUI()

    def initUI(self):
        self.addToolBarElements()
        self.show()

    def addToolBarElements(self):
        self.toolBar = self.addToolBar("toolBar")
        self.newwindow = QtGui.QAction(QtGui.QIcon(os.path.join(os.path.dirname(__file__),'icons/new.png')), "New Note",self)
        self.newwindow.setStatusTip("New")
        self.newwindow.triggered.connect(self.on_newwindow)

        self.toolBar.addAction(self.newwindow)

    def on_newwindow(self):
        w = Sticky()
        w.show()
        self.others_windows.append(w)

def run():
    app = QtGui.QApplication(sys.argv)
    notes = Sticky()
    sys.exit(app.exec_()) 

run()
...