我使用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()
答案 0 :(得分:2)
在_openwidgets(self)
中,您将新创建的窗口小部件的对象设置为self.plotwidget
,当您创建另一个窗口小部件时,它的对象存储在同一个变量中,之前创建的窗口会丢失它的引用,因此窗口由系统关闭。 (只要至少有一个变量包含它的对象,窗口就会保持打开状态)
如果您想要打开所有窗口,请尝试将对象保存在list
中,如下所示:
window = Widget(self.flightlist.currentItem().text())
window.show()
self.plotwidgets.append(window)
注意:不要忘记在self.plotwidgets
内__init__()
声明list