Форум сайта python.su
0
Помогите разобраться есть таблица пытаюсь ее сохранить с помощью
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)
Офлайн
857
ROBOT-3000Истинность никогда через is не проверяется.if not filesave_name is True:
if not filesave_name:
ROBOT-3000Выведи данные на экран сначала.
получается просто пустой csv файл.
Офлайн
0
Вот мой черновик
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)
Офлайн
857
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)
Офлайн
0
Тут ты прав я много чего не знаю, но учусь.
Да я уже просто закипаю от этого, какой день бьюсь и ни чего не выходит, вот и получается is True…..
Как вывести на экран, можешь подсказать?
Офлайн
857
ROBOT-3000Просто делаешь print(rowdata) вместо записи в файл и смотришь в консоли, что выводится. А потом корректируешь код, пока не станет правильно выводиться всё. И только потом возвращаешь запись в файл.
Как вывести на экран, можешь подсказать?
Офлайн
0
Текст сохраняет но иконки игнорит будто их нет в чем проблема?
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)
Офлайн
857
Там не надо в str() оборачивать, оно и так в виде строки передаётся.
Вот эту строку
ROBOT-3000надо сместить влево, чтобы она в цикле ряда была, а не в цикле колонок.writer.writerow(row)
ROBOT-3000Потому что ты сохраняешь в CSV, это текстовый формат, туда картинки не сохраняются. Даже не знаешь, что делаешь. Картинки ставятся в клетки, но используются только для отображения. То есть ты ставишь туда число и туда же ставишь картинку на это число, и вот число будет сохранено в файл, а картинка будет просто показываться в окне.
Текст сохраняет но иконки игнорит будто их нет в чем проблема?
Отредактировано py.user.next (Дек. 13, 2016 01:33:49)
Офлайн
0
Ты меня вообще не понимаешь, и помогать не хочешь а злорадствуешь.
Не надо мне мелочевку обьяснять.Книжки я читаю по мимо обучения пытаюсь что то делать на практике, у меня уже почти готовая программа осталось только пару функций допилить.
Я не хочу в таблицу сохранять картинки, я хочу чтобы сохраненный файл использовался для хранения данных. Вот в таблице например должно вставляться вот это sym1.png, потом это загружается обратно в таблицу и там появляется иконка(чего не происходит).
Если бы я все знал то здесь бы не спрашивал, и это не просто сохранить файл, а сохранить из таблицы QTablewidget по которой документация на C написана.
Офлайн
857
ROBOT-3000Ты выбрал CSV для хранения данных из таблицы, картинки в CSV не сохраняются, потому что он для текста сделан. Делать за тебя программу никто не будет. Сам ты её тоже не сделаешь, потому что элементарных вещей не знаешь ни в питоне, ни в форматах хранения, ни в PyQt. И ты, ничего не зная, говоришь, что у тебя программа почти готова. А что же она у тебя почти готова, а не готова до конца? А потому что ты картинку пытаешься сохранить туда, куда она не может быть сохранена. Так что бери книжку и читай её с первой страницы, иначе ты ничего знать не будешь и будешь писать только всякое такое нерабочее фуфло.
Если бы я все знал то здесь бы не спрашивал
ROBOT-3000Не на C, а на C++ - это разные языки и у них разные стандарты. Если ещё глубже вдаваться в подробности, то никто уже давным давно QTableWidget не использует, потому что это всё принято делать через модель, к которой подключается QTableView.
а сохранить из таблицы QTablewidget по которой документация на C написана
Отредактировано py.user.next (Дек. 14, 2016 02:42:18)
Офлайн