Форум сайта python.su
Помогите разобраться есть таблица пытаюсь ее сохранить с помощью
def save_file(self): filesave_name = QtGui.QFileDialog.getSaveFileName(self, 'Сохранить', '', 'CSV(*.csv)') if not filesave_name is True: with open(str(filesave_name), 'w') as stream: writer = csv.writer(stream) for row in range(self.table.rowCount()): rowdata = [] for column in range(self.table.columnCount()): item = self.table.item(row, column) if item is not None: rowdata.append(item) writer.writerow(rowdata)
Офлайн
ROBOT-3000Истинность никогда через is не проверяется.if not filesave_name is True:
if not filesave_name:
ROBOT-3000Выведи данные на экран сначала.
получается просто пустой csv файл.
Офлайн
Вот мой черновик
import sys, csv from PyQt4 import QtGui from PyQt4 import QtCore from functools import partial class Icons(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.table = QtGui.QTableWidget(self) self.table.setRowCount(20) self.table.setColumnCount(20) self.table.setGeometry(0, 29, 1600, 1600) self.table.verticalHeader() self.table.horizontalHeader() self.table.show() self.table.horizontalHeader().hide() self.table.verticalHeader().hide() # test self.table.setColumnWidth(0, 30) self.table.setRowHeight(0, 30) self.table.resizeColumnsToContents() #self.table.resizeRowsToContents() self.setGeometry(300, 300, 800, 600) self.setWindowTitle('icon') ################################################################################# self.lay = QtGui.QHBoxLayout() self.lay.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) self.lay.setMargin(0) self.lay.setSpacing(0) self.setLayout(self.lay) self._buttns = [ {'btn': None, 'text': u'', 'img': 'sym1.png', 'ico': 'sym1.png'}, {'btn': None, 'text': u'', 'img': 'sym2.png', 'ico': 'sym2.png'}] for i in self._buttns: i["btn"] = QtGui.QPushButton(i["text"]) i["btn"].setIcon(QtGui.QIcon(i["ico"])) i["btn"].clicked.connect(partial(self.on_clicked_btn, i["img"])) self.lay.addWidget(i["btn"]) self.btn = QtGui.QPushButton("save csv", self) self.btn.setGeometry(75, 0, 80, 30) self.btn.sizeHint() self.connect(self.btn, QtCore.SIGNAL("clicked()"), self.save_file) ################################################################################## #----------------------------- def save_file(self): filesave_name = QtGui.QFileDialog.getSaveFileName(self, 'Сохранить', '', 'CSV(*.csv)') if not filesave_name is True: with open(str(filesave_name), 'w') as stream: writer = csv.writer(stream) for row in range(self.table.rowCount()): rowdata = [] for column in range(self.table.columnCount()): item = self.table.item(row, column) if item is not None: rowdata.append(str(item.text())) writer.writerow(rowdata) def on_clicked_btn(self, img): _item = TableWidgetItem(img, "") self.table.setCellWidget(self.table.currentRow(), self.table.currentColumn(), _item) #------------ ################################################################################## class TableWidgetItem(QtGui.QWidget): def __init__(self, icon, text): QtGui.QWidget.__init__(self) layout = QtGui.QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) label = QtGui.QLabel() label.setPixmap(QtGui.QPixmap(icon)) label.setAlignment(QtCore.Qt.AlignCenter) layout.addWidget(label) ################################################################################# app = QtGui.QApplication(sys.argv) qb = Icons() qb.show() sys.exit(app.exec_())
Отредактировано ROBOT-3000 (Дек. 12, 2016 12:33:34)
Офлайн
ROBOT-3000Она возвращает либо строку с путём, либо пустую строку.
Без is True не работает. Не знаю в чем дело.
if filesave_name:
ROBOT-3000А вот это ерунда какая-то, которая говорит только о том, что ты питон вообще не знаешь. Там никогда не возвращается ни True, ни False.if not filesave_name is True:
>>> '' is True False >>> 'abc' is True False >>>
ROBOT-3000У меня всё показывает. И картинки вставляет, и числа в файл сохраняет. (На обеих версиях питона.)
но иконки которые вставляю вообще не показывает
Отредактировано py.user.next (Дек. 12, 2016 14:51:40)
Офлайн
Тут ты прав я много чего не знаю, но учусь.
Да я уже просто закипаю от этого, какой день бьюсь и ни чего не выходит, вот и получается is True…..
Как вывести на экран, можешь подсказать?
Офлайн
ROBOT-3000Просто делаешь print(rowdata) вместо записи в файл и смотришь в консоли, что выводится. А потом корректируешь код, пока не станет правильно выводиться всё. И только потом возвращаешь запись в файл.
Как вывести на экран, можешь подсказать?
Офлайн
Текст сохраняет но иконки игнорит будто их нет в чем проблема?
def save_file(self): FS = QtGui.QFileDialog.getSaveFileName(self, 'Сохранить', '', 'CSV(*.csv)') if FS: with open(str(FS), 'w') as stream: writer = csv.writer(stream) for x in range(self.table.rowCount()): row = [] for y in range(self.table.columnCount()): item = self.table.item(x, y) if item is not None: row.append(str(item.text())) print(row) writer.writerow(row)
row.append(str(item.text()))
Отредактировано ROBOT-3000 (Дек. 12, 2016 19:08:05)
Офлайн
Там не надо в str() оборачивать, оно и так в виде строки передаётся.
Вот эту строку
ROBOT-3000надо сместить влево, чтобы она в цикле ряда была, а не в цикле колонок.writer.writerow(row)
ROBOT-3000Потому что ты сохраняешь в CSV, это текстовый формат, туда картинки не сохраняются. Даже не знаешь, что делаешь. Картинки ставятся в клетки, но используются только для отображения. То есть ты ставишь туда число и туда же ставишь картинку на это число, и вот число будет сохранено в файл, а картинка будет просто показываться в окне.
Текст сохраняет но иконки игнорит будто их нет в чем проблема?
Отредактировано py.user.next (Дек. 13, 2016 01:33:49)
Офлайн
Ты меня вообще не понимаешь, и помогать не хочешь а злорадствуешь.
Не надо мне мелочевку обьяснять.Книжки я читаю по мимо обучения пытаюсь что то делать на практике, у меня уже почти готовая программа осталось только пару функций допилить.
Я не хочу в таблицу сохранять картинки, я хочу чтобы сохраненный файл использовался для хранения данных. Вот в таблице например должно вставляться вот это sym1.png, потом это загружается обратно в таблицу и там появляется иконка(чего не происходит).
Если бы я все знал то здесь бы не спрашивал, и это не просто сохранить файл, а сохранить из таблицы QTablewidget по которой документация на C написана.
Офлайн
ROBOT-3000Ты выбрал CSV для хранения данных из таблицы, картинки в CSV не сохраняются, потому что он для текста сделан. Делать за тебя программу никто не будет. Сам ты её тоже не сделаешь, потому что элементарных вещей не знаешь ни в питоне, ни в форматах хранения, ни в PyQt. И ты, ничего не зная, говоришь, что у тебя программа почти готова. А что же она у тебя почти готова, а не готова до конца? А потому что ты картинку пытаешься сохранить туда, куда она не может быть сохранена. Так что бери книжку и читай её с первой страницы, иначе ты ничего знать не будешь и будешь писать только всякое такое нерабочее фуфло.
Если бы я все знал то здесь бы не спрашивал
ROBOT-3000Не на C, а на C++ - это разные языки и у них разные стандарты. Если ещё глубже вдаваться в подробности, то никто уже давным давно QTableWidget не использует, потому что это всё принято делать через модель, к которой подключается QTableView.
а сохранить из таблицы QTablewidget по которой документация на C написана
Отредактировано py.user.next (Дек. 14, 2016 02:42:18)
Офлайн