Содержимое файла не отображается, когда я щелкаю файл в табличном представлении - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь отобразить содержимое файла, когда нажимаю на имя файла ( data2.txt ) методом onclick в табличном представлении с использованием pyside.Я не получил никакой ошибки, но я не могу достичь ожидаемого результата.Может ли кто-нибудь подсказать мне, как я могу отобразить содержимое файла во всем виджете, когда я снова дважды щелкнул содержимое файла, чтобы вернуться к предыдущему виджету.

Вот мой код:

import sys
import os
import csv
import datetime
from PySide import QtGui, QtCore

class ViewWidget(QtGui.QWidget):
    dirPath = "C:\raghava\main project"
    def __init__(self, x, index, parent=None):
        super(ViewWidget, self).__init__(parent)
        self.p_index = QtCore.QPersistentModelIndex(index)
        self.content_button = QtGui.QWidget(self)
        lay = QtGui.QHBoxLayout(self.content_button)
        lay.setContentsMargins(0, 0, 0,0)
        self.label = QtGui.QLineEdit()
        self.label.setText(datetime.datetime.today().strftime('%d-%m-%Y'))
        self.label.setReadOnly(True)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label1 = QtGui.QLineEdit()
        self.label1.setText(self.dirPath)
        self.label1.setReadOnly(True)
        self.label1.resize(250, 100)
        self.label1.setAlignment(QtCore.Qt.AlignRight)
        lay.addWidget(self.label)
        lay.addWidget(self.label1)
        self.content_button.move(x, 0)  

class Example(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Example, self).__init__(parent)
        self.dirPath = ViewWidget.dirPath
        self.open_file()
        self.file_data=""
    def open_file(self):
        self.setCentralWidget(QtGui.QWidget())
        layout = QtGui. QGridLayout(self.centralWidget())
        self.model  =QtGui.QStandardItemModel(self)
        self.tableView = QtGui.QTableView()
        self.tableView.setModel(self.model)
        self.tableView.horizontalHeader().setStretchLastSection(True)
        self.tableView.clicked.connect(self.onClick)

        self.tableView.verticalHeader().hide()
        self.tableView.horizontalHeader().hide()
        self.appendRowItems(self.dirPath)
        layout.addWidget(self.tableView)
        self.resize(1300,500)
    def appendRowItems(self, dir_path):
        for root, dirs, files in os.walk(dir_path):
            if root == dir_path:
                for file in files:
                    item = QtGui.QStandardItem(file)
                    item.setData(os.path.join(root, file))
                    self.model.appendRow(item)
                    ix = self.model.indexFromItem(item)
                    self.tableView.setIndexWidget(ix, ViewWidget(1270, ix))
    @QtCore.Slot(QtCore.QModelIndex)
    def onClick(self, ix):
        self.file = self.model.itemFromIndex(ix)
        self.file_data = ix.data(QtCore.Qt.UserRole+1)
        self.scrollArea = QtGui.QScrollArea()
        self.scrollArea.setBackgroundRole(QtGui.QPalette.Light)
        self.scrollArea.setWidgetResizable(True)
        self.w = QtGui.QWidget()
        self.lay = QtGui.QVBoxLayout()
        self.model1 = QtGui.QStandardItemModel(self)
        self.tableView = QtGui.QTableView(self)
        self.tableView.setModel(self.model1)
        self.tableView.horizontalHeader().setStretchLastSection(True)
        with open(str(self.file_data), "r") as fileInput:
            for row in csv.reader(fileInput):
                items = [
                    QtGui.QStandardItem(field)
                    for field in row
                ]
                if items: self.model1.appendRow(items)
        self.lay.addWidget(self.tableView)
        self.w.setLayout(self.lay)
        self.scrollArea.setWidget(self.w)
   def mousePressEvent(self,evnt):
        print evnt
        print event.screenPos()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    eg =  Example()
    vw= ViewWidget(1270,QtGui.QStandardItemModel().indexFromItem(QtGui.QStandardItem("./adding_buttons.py")))
    eg.show()
    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 28 октября 2018

Извините, у меня есть PyQt5.Мне показалось, что ваше приложение должно выглядеть так:

import sys
import os
from PyQt5.QtWidgets import (QApplication, QWidget, QSplitter, QTreeView, 
                             QTextEdit, QFileSystemModel, QVBoxLayout, QMessageBox)
from PyQt5.QtCore    import QDir

class MyWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle('Direct tree')
        self.resize(700, 400)

        self.vbox     = QVBoxLayout()
        self.splitter = QSplitter()

        self.model = QFileSystemModel()
        self.model.setRootPath(QDir.rootPath())

        self.tree = QTreeView()
        self.tree.setModel(self.model)

        # Try to comment out the line below.
        self.tree.setRootIndex(self.model.index(os.getcwd()))  

        self.tree.doubleClicked.connect(self._on_double_clicked)

        self.textEdit = QTextEdit()
        self.splitter.addWidget(self.tree)
        self.splitter.addWidget(self.textEdit)
        self.splitter.setSizes([100, 200])
        self.vbox.addWidget(self.splitter)
        self.setLayout(self.vbox)

        self.tree.setAnimated(False)
        self.tree.setIndentation(20)
        self.tree.setSortingEnabled(True)

    def _on_double_clicked(self, index):
        file_name = self.model.filePath(index)
        try:
            with open(file_name, encoding='utf-8') as f:
                text = f.read()
                self.textEdit.setPlainText(text)
        except Exception as err:
            QMessageBox.about(self, "Error", "Exception: {}".format(err))
            return        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MyWidget()
    win.show()
    sys.exit(app.exec_())

enter image description here

...