如何为单击的每个项目打开一个新窗口?

2024-04-24 23:02:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

目的是对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()          

Tags: 项目fromimportselfinitdefitemparent
1条回答
网友
1楼 · 发布于 2024-04-24 23:02:11

_openwidgets(self)中,您将新创建的widget的对象指定为self.plotwidget,当您创建另一个widget时,它的对象存储在同一个变量中,先前创建的对象丢失了它的引用,因此该窗口被系统关闭。(只要至少有一个变量包含其对象,窗口将保持打开状态)

如果要打开所有窗口,请尝试将其对象保存在list中,如下所示:

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

注意:别忘了在您的__init__()中声明self.plotwidgetslist

相关问题 更多 >