Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

Мой чистовик
Код:

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 в 15:43.
kos94ok вне форума   Ответить с цитированием
Старый 05.12.2016, 15:42   #23
pompiduskus
юзер как все
Профессионал
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Адрес: земля
Сообщений: 1,356
Репутация: 535

icq: 446.452.423
По умолчанию

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

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

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

icq: 446.452.423
По умолчанию

Еще версия самого 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 Кб, 0 просмотров)
__________________
<Дзен - Вся вселенная в тебе > | <Рай - это всего лишь мечта терпящего страдания ада> | github.com/ch3ll0v3k
pompiduskus вне форума   Ответить с цитированием
Старый 05.12.2016, 18:47   #26
kos94ok
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 28
Репутация: 10
По умолчанию

Нашел класс QTableWidgetSelectionRange отвечающий за выделение ячеек но как всегда все не понять и примеры на C++ написаны.
вроде вот так я получаю выделеные ячейки
Код:

sel = self.table.selectedRanges()

А выделение у тебя работает?
kos94ok вне форума   Ответить с цитированием
Старый 05.12.2016, 19:46   #27
pompiduskus
юзер как все
Профессионал
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Адрес: земля
Сообщений: 1,356
Репутация: 535

icq: 446.452.423
По умолчанию

Цитата:
Сообщение от 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();


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

Привет вот что смог найти и сделать но не совсем работает, создает просто пустую таблицу, не понятно как туда вставлять свои иконки.(есть еще функция открытия файла но сначала надо с этим разобраться)
Кстати очень похожа на твою функцию с дата файлом.
Код:

        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, 20:55   #29
pompiduskus
юзер как все
Профессионал
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Адрес: земля
Сообщений: 1,356
Репутация: 535

icq: 446.452.423
По умолчанию

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




17:32.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru