Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2016, 14:07   #21
kos94ok
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 28
По умолчанию

Запустил твой код. Но почему то не работают кнопки открыть и сохранить,
И выделение ячеек тоже не работает.(Может это у меня так)
kos94ok вне форума Ответить с цитированием
Старый 05.12.2016, 14:08   #22
kos94ok
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 28
По умолчанию

Мой чистовик
Код:
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
from functools import partial



class TableWindow(QtGui.QMainWindow):
        def __init__(self, _X_, _Y_, parent=None):
                QtGui.QWidget.__init__(self, parent)
                self.setWindowTitle('Схема для вязания')
                self.resize(1024, 768)
                self.setWindowIcon(QtGui.QIcon('ico.png'))
                self.center()
                #Присваеваем переменным из конструктора класса
                self.ROWS = _X_
                self.COLS = _Y_
                # Разер самой таблицы и растягиваем по содержимому
                self.IMG = ''
                self.SIZE = {'W': 24, 'H': 24};  # 24 / 24
                # Таблица
                self.table = QtGui.QTableWidget(self)
                #принимает длину и ширину
                self.table.setRowCount(self.ROWS)
                self.table.setColumnCount(self.COLS)
                # выравнивание таблицы
                self.table.setGeometry(0, 105, ((self.COLS+1)*self.SIZE['W']), ((self.ROWS+1)*self.SIZE['H']))
                self.table.horizontalHeader().hide()
                self.table.verticalHeader().hide()
                self.table.cellClicked.connect(self.cell_clicked)
                #Размер ячеек
                for _col in range(0, self.COLS):
                    self.table.setColumnWidth(_col, self.SIZE['W'])

                for _row in range(0, self.ROWS):
                    self.table.setRowHeight(_row, self.SIZE['H'])

                #Тулбар
                tb = self.addToolBar("File")

                new = QtGui.QAction(QtGui.QIcon("new.png"), "new", self)
                tb.addAction(new)

                open = QtGui.QAction(QtGui.QIcon("open.png"), "open", self)
                tb.addAction(open)
                save = QtGui.QAction(QtGui.QIcon("save.png"), "save", self)
                tb.addAction(save)
                tb.actionTriggered[QtGui.QAction].connect(self.open_file)


                ###########################КНОПКИ###############################

                self.ICOBTN = [
                    {'text': '', 'img': 'sym1'}, {'text': '', 'img': 'sym2'},
                    {'text': '', 'img': 'sym3'}, {'text': '', 'img': 'sym4'},
                    {'text': '', 'img': 'sym5'}, {'text': '', 'img': 'sym6'},
                    {'text': '', 'img': 'sym7'}, {'text': '', 'img': 'sym8'},
                    {'text': '', 'img': 'sym9'}, {'text': '', 'img': 'sym10'},
                    {'text': '', 'img': 'sym11'}, {'text': '', 'img': 'sym12'},
                    {'text': '', 'img': 'sym13'}, {'text': '', 'img': 'sym14'},
                    {'text': '', 'img': 'sym15'}, {'text': '', 'img': 'sym16'},
                    {'text': '', 'img': 'sym17'}, {'text': '', 'img': 'sym18'},
                    {'text': '', 'img': 'sym19'}, {'text': '', 'img': 'sym20'},
                    {'text': '', 'img': 'sym21'}, {'text': '', 'img': 'sym22'},
                    {'text': '', 'img': 'sym23'}, {'text': '', 'img': 'sym24'},
                    {'text': '', 'img': 'sym25'}, {'text': '', 'img': 'sym26'},
                    {'text': '', 'img': 'sym27'}, {'text': '', 'img': 'sym28'},
                    {'text': '', 'img': 'sym29'}, {'text': '', 'img': 'sym30'},
                    {'text': '', 'img': 'sym31'}, {'text': '', 'img': 'sym32'},
                    {'text': '', 'img': 'sym33'}, {'text': '', 'img': 'sym34'},
                    {'text': '', 'img': 'sym35'}, {'text': '', 'img': 'sym36'},
                    {'text': '', 'img': 'sym37'}, {'text': '', 'img': 'sym38'},
                    {'text': '', 'img': 'sym39'}, {'text': '', 'img': 'sym40'},
                    {'text': '', 'img': 'sym41'}, {'text': '', 'img': 'sym42'},
                    {'text': '', 'img': 'sym43'}, {'text': '', 'img': 'sym44'},
                    {'text': '', 'img': 'sym45'}, {'text': '', 'img': 'sym46'},
                    {'text': '', 'img': 'sym47'}, {'text': '', 'img': 'sym48'},
                    {'text': '', 'img': 'sym49'}, {'text': '', 'img': 'sym50'},
                    {'text': '', 'img': 'sym51'}, {'text': '', 'img': 'sym52'},
                    {'text': '', 'img': 'sym53'}, {'text': '', 'img': 'sym54'},
                    {'text': '', 'img': 'sym55'}, {'text': '', 'img': 'sym56'},
                    {'text': '', 'img': 'sym57'}, {'text': '', 'img': 'sym58'},
                    {'text': '', 'img': 'sym59'}, {'text': '', 'img': 'sym60'},
                    {'text': '', 'img': 'sym61'}, {'text': '', 'img': 'sym62'},
                ]

                btn_w = 30 #Ширина кнопки
                btn_h = 30 #Высота кнопки
                total_btn_rows = 2 #Строк кнопок

                btn_pos_x = 0
                btn_pos_y = 1
                ttl_btns = len(self.ICOBTN)
                btn_margin_top = 5

                self.BTNS = []
                for i in range(0, ttl_btns):
                    self.BTNS.append(
                        QtGui.QPushButton(QtGui.QIcon(self.ICOBTN[i]["img"]+'.png'), self.ICOBTN[i]["text"], self))

                    self.BTNS[i].clicked.connect(partial(self.select_image, self.ICOBTN[i]["img"] + '.png'))
                    self.BTNS[i].setStyleSheet("""
                                                   QPushButton:hover { background-color: white }
                                                   QPushButton:!hover { background-color: white }

                                                    QPushButton:pressed { background-color: rgb(0, 255, 0); }""")

                    self.BTNS[i].setGeometry(btn_w * btn_pos_x, (btn_h * btn_pos_y) + btn_margin_top, btn_w, btn_h)

                    btn_pos_x += 1
                    if btn_pos_x >= (ttl_btns / total_btn_rows):
                        btn_pos_x = 0
                        btn_pos_y += 1

#####################################################
        def select_image(self, img):
                self.IMG = img
#####################################################
        def cell_clicked(self, c_0, c_1):
            _item = TableWidgetItem(self.IMG, "")
            self.table.setCellWidget(c_0, c_1, _item)



        def open_file(self):
            fname = QtGui.QFileDialog.getOpenFileName(self, 'Open file', 'c:\\')


####################ПО ЦЕНТРУ ЭКРАНА

        def center(self):
            screen = QtGui.QDesktopWidget().screenGeometry()
            size = self.geometry()
            self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
#################ЗАПРОС ВЫХОДА
        def closeEvent(self, event):
            reply = QtGui.QMessageBox.question(self, ' ', "Вы хотите выйти?", QtGui.QMessageBox.Yes,
                                               QtGui.QMessageBox.No)
            if reply == QtGui.QMessageBox.Yes:
                event.accept()
            else:
                event.ignore()
####################СПЕЦИАЛЬНО ДЛЯ ИКОНКИ В ЦЕНТРЕ ЯЧЕЙКИ
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)

Последний раз редактировалось kos94ok; 05.12.2016 в 14:43.
kos94ok вне форума Ответить с цитированием
Старый 05.12.2016, 14:42   #23
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Нормально выглядит!

А мой пример, не знаб почему у тебя не пашет. Может у нас версии PyQt разные. Да я еще под Debian пишу.
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 05.12.2016, 14:44   #24
kos94ok
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 28
По умолчанию

Я знаю что у нас версии питон разные. Но может что то еще.
kos94ok вне форума Ответить с цитированием
Старый 05.12.2016, 16:09   #25
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Еще версия самого Qt наверное.

Вот как выглядит окно.

И вот в таком формате сохраняет. Там просто какая картинка была на кнопке, то он и записывает в файл. Или пустая строка.

Код:
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,sym1.png,,,,,,,,,,,,,,
,,,,,sym2.png,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,sym2.png,,,,,
,,sym2.png,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,sym1.png,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,sym2.png,,,,,,,sym2.png,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,sym2.png,,,,,,,,,,,,,
,,sym2.png,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,sym1.png,sym2.png,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,sym2.png,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,sym2.png,,,,,,,,,,,,,,,
,,,,,,,,,,sym1.png,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,sym2.png,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,sym2.png,,,,,,,sym2.png,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,
Изображения
Тип файла: png Screenshot from 2016-12-05 14:03:38.png (64.7 Кб, 108 просмотров)
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 05.12.2016, 17:47   #26
kos94ok
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 28
По умолчанию

Нашел класс QTableWidgetSelectionRange отвечающий за выделение ячеек но как всегда все не понять и примеры на C++ написаны.
вроде вот так я получаю выделеные ячейки
Код:
sel = self.table.selectedRanges()
А выделение у тебя работает?
kos94ok вне форума Ответить с цитированием
Старый 05.12.2016, 18:46   #27
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Цитата:
Сообщение от kos94ok Посмотреть сообщение
вроде вот так я получаю выделеные ячейки
Код:
sel = self.table.selectedRanges()
Да, все верно.
Код:
selected = self.table.selectedRanges();
selected[0].topRow();
selected[0].bottomRow();
selected[0].leftColumn();
selected[0].rightColumn();

self.table.item(1,2).text();
self.table.item(1,2).icon().name();

Цитата:
А выделение у тебя работает?
Только отдельных елементов. Без группирования.
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 11.12.2016, 18:05   #28
kos94ok
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 28
По умолчанию

Привет вот что смог найти и сделать но не совсем работает, создает просто пустую таблицу, не понятно как туда вставлять свои иконки.(есть еще функция открытия файла но сначала надо с этим разобраться)
Кстати очень похожа на твою функцию с дата файлом.
Код:
        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)
P.s Можно если что в лс тебе писать? =)
kos94ok вне форума Ответить с цитированием
Старый 11.12.2016, 19:55   #29
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Да, конечно. В Асю тоже пиши если есть. Так даже будет удобнее.
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Цик отвечающий за деление строки на две под строки А-р-т-ё-м Помощь студентам 1 13.11.2011 19:40
сравнить две строки. С++ Демик Помощь студентам 12 03.04.2011 21:54
сравнить две строки maxs7 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 01.10.2010 05:27
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27