Я пытаюсь отобразить содержимое файла, когда нажимаю на имя файла ( 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_())