【问题标题】:How to open a new window for each item clicked?如何为每个点击的项目打开一个新窗口?
【发布时间】:2013-12-02 12:19:49
【问题描述】:

我使用 getOpenFileNames 选择了几个文件并将它们放在 QListWidget 中。我还设法通过双击标题为文件名的项目打开了一个窗口。但是,如果我点击另一个项目,它会关闭前一个窗口。

如何在不关闭其他项目的情况下为我单击的每个项目打开一个窗口?

目的是对QListWidget中的每个数据文件进行数学运算,我想在屏幕上同时可视化每个数据集,然后保存修改的数据。

from PyQt4 import QtCore, QtGui
from dataGet.GetVar import Get
from datapath import *
import sys

class Widget(QtGui.QWidget):

    def __init__(self, item, parent = None):
        super(Widget, self).__init__(parent)

        horiz = 600
        vert  = 600
        self.setGeometry(self.width()/2, self.height()/2,horiz,vert)    
        self.setWindowTitle(item)

class MainWindow(QtGui.QMainWindow):  
    def __init__(self, parent=None):
        super(MainWindow,self).__init__(parent)

        self._setupActions()
        self._setupList()
        self._setupUi()

    def _addFiles(self):
        files = QtGui.QFileDialog.getOpenFileNames(self,"Open File", dirpath,"txt Files    (*.txt)")

        self.stringlist = []
        for string in files:
            self.stringlist.append(string)       

        self.flightlist.addItems(self.stringlist)

        self.flightlist.itemDoubleClicked.connect(self._openwidgets)

    def _getData(self):
        #get variables from file
        self._addFiles
        var = Get(self._addFiles,'Ozo').Var()   

    def _openwidgets(self):

        item = self.flightlist.currentItem().text()        
        self.plotwidget = Widget(item)
        self.plotwidget.show()

    def _setupActions(self):
        self.exitAct = QtGui.QAction(QtGui.QIcon(':/images/exit.png'),"E&xit", self,     shortcut="Ctrl+Q",
        statusTip="Exit", triggered=self.close)  

        self.addFilesAct = QtGui.QAction(QtGui.QIcon(':/images/open.png'),"Add &Files", self, shortcut=QtGui.QKeySequence.Open,
        statusTip="add files", triggered=self._addFiles)     

    def _setupList(self):
        #Build the flightlist selection
        self.flightlist = QtGui.QListWidget(self)

    def _setupUi(self):
        # Window size
        horiz = 500
        vert  = 500
        self.setGeometry(self.width()/2, self.height()/2,horiz,vert)
        self.setWindowTitle("try-1.0")

        #MenuBar
        self.FileMenu = self.menuBar().addMenu("&File")
        self.FileMenu.addAction(self.addFilesAct)
        self.FileMenu.addSeparator();
        self.FileMenu.addAction(self.exitAct)

        #FileList
        mainLayout = QtGui.QVBoxLayout()
        mainLayout.addWidget(self.flightlist)  

        widget = QtGui.QWidget()
        widget.setLayout(mainLayout)

        self.setCentralWidget(widget)

def main():

    app = QtGui.QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()          

【问题讨论】:

    标签: python window pyqt


    【解决方案1】:

    _openwidgets(self) 中,您将新创建的小部件的对象分配给self.plotwidget,当您创建另一个小部件时,它的对象存储在同一个变量中,之前创建的对象失去了它的引用,因此窗口被关闭系统。 (只要至少一个变量包含它的对象,窗口就会保持打开状态)

    如果您想打开所有窗口,请尝试将它们的对象保存在list 中,如下所示:

    window = Widget(self.flightlist.currentItem().text())
    window.show()
    self.plotwidgets.append(window)
    

    注意:不要忘记在您的__init__() 中声明self.plotwidgetslist

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      相关资源
      最近更新 更多