2

以下の例では、QListWidget に Qdialog を開くファイルを入力します。リストで選択したファイルを追加する方法がわかりません。新しいクラスを作るべきですか?setupList と addFiles の 2 つのメソッドを接続するにはどうすればよいですか?

import sys
from PyQt4 import QtCore, QtGui

from datapath import *

class MainWindow(QtGui.QMainWindow):

    def __init__(self):
        super(MainWindow,self).__init__()

        self.sources =[]

        self.setupActions()
        self.setupList()
        self.setupUi()
        self.setupStatusBars()

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

        for string in files:
            self.sources.append(str(string))

        return self.sources

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

        self.addFilesAct = QtGui.QAction(
            QtGui.QIcon(':/images/open.png'),
            "Add &Files", self, shortcut=QtGui.QKeySequence.Open,
            statusTip="Open an existing file", triggered=self.addFiles
            )

    def setupList(self):
        #FileList
        self.FileList = QtGui.QListWidget(self)
        self.FileList.addItems(self.sources)

    def setupUi(self):
        #Window size
        horiz = 300
        vert  = 300
        self.setGeometry(self.width()/2, self.height()/2,horiz,vert)
        self.setWindowTitle("test")

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

        #ToolBar
        self.fileToolBar = self.addToolBar("Open")
        self.fileToolBar.addAction(self.addFilesAct)
        self.fileToolBar.setIconSize(QtCore.QSize(64,64))

        #Build Layout
        mainLayout = QtGui.QVBoxLayout()
        mainLayout.addWidget(self.FileList)

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

        self.setCentralWidget(widget)

    def setupStatusBars(self):
        self.statusBar().showMessage("Ready")


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

if __name__ == '__main__':

    main()
4

2 に答える 2

1

self.sources変更しても、QListWidget の要素は変更されません。そのため、ダイアログでファイルが選択されるたびに QListWidget の addItems メソッドが呼び出されるように、 self.FileList.addItems(self.sources)insetupList()を削除して代わりに挿入する必要があります。addFiles()その後return self.sourcesaddFiles()不要になります。

于 2013-11-28T15:00:20.040 に答える
1

listwidget にファイルを追加するには、addFilesメソッドは次のようになります。

def addFiles(self):
    files = QtGui.QFileDialog.getOpenFileNames(
        self, "Open File", dirpath, "txt Files (*.txt)")
    for string in files:
        self.FileList.addItem(string)

リストはsource冗長なようです。ファイルの完全なリストを取得する必要がある場合は、次のようにすることができます。

    sources = []
    for row in range(self.FileList.count()):
        item = self.FileList.item(row)
        # python3
        sources.append(item.text())
        # python2, convert to python strings
        # sources.append(unicode(item.text()))
    print(sources)
于 2013-11-28T19:08:28.577 に答える