• Почему шрифт сглаживается, даже если функция сглаживания шрифта отключена?

    @RG2 Автор вопроса
    1) 100%, 1600x900
    2) 3) Но и не системные тоже сглаживаются, причём внезапно.
    Написано
  • Как выровнять чертёж в PDF, чтобы можно было распечатать без обрезания?

    @RG2 Автор вопроса
    Попробовал исправить здесь
    def export_to_pdf(self, filename):
            printer = QPrinter(QPrinter.PrinterMode.ScreenResolution)
            printer.setOutputFormat(QPrinter.OutputFormat.PdfFormat)
            printer.setOutputFileName(filename)
            printer.setPageOrientation(QPageLayout.Orientation.Landscape)
    
            painter = QPainter(printer)
    
            # Get the width and height of the scene
            scene_width = self.scene.width()
            scene_height = self.scene.height()
    
            # Get the width and height of the printer's page
            page_width = printer.pageLayout().fullRect(QPageLayout.Unit.Point).width()
            page_height = printer.pageLayout().fullRect(QPageLayout.Unit.Point).height()
    
            # Calculate the scale factor
            scale_factor = max(page_width / scene_width, page_height / scene_height)
    
            # Calculate the translation to center the scene
            x_translation = (page_width - scene_width * scale_factor) / 2
            y_translation = (page_height - scene_height * scale_factor) / 2
    
            # Apply the scaling and translation
            painter.translate(x_translation, y_translation)
            #painter.scale(scale_factor, scale_factor)
    
            # Render the scene
            self.scene.render(painter)
    
            painter.end()
            print(f"Exported to {filename}")

    Уже получше
    Написано
  • Как выровнять чертёж в PDF, чтобы можно было распечатать без обрезания?

    @RG2 Автор вопроса
    А это класс создания чертежа:

    class Perechen1(QWidget):
    def __init__(self, parent=None, Database=None):
    super().__init__()
    self.setFixedSize(1111, 860)
    self.DataBase = Database
    self.query = QtSql.QSqlQuery()

    self.stm = QtSql.QSqlTableModel(self)
    self.stm.setTable("RAWDATA")
    # self.stm.setSort(2, QtCore.Qt.SortOrder.AscendingOrder)
    self.stm.select()

    self.initUI()

    def initUI(self):
    scene = QGraphicsScene(0, 0, 0, 0) # создаем вид и сцену
    view = QGraphicsView(scene)
    layout = QVBoxLayout()

    self.collumn_one = [] # создаем списки для хранения
    self.collumn_two = []
    self.collumn_three = []
    self.collumn_four = []
    self.boxes = []

    #self.button1 = QPushButton('Получить данные')
    # self.button1.clicked.connect(self.fetchData)
    # self.layout.addWidget(self.button1)
    # self.button2 = QPushButton('Сохранить данные')
    # self.button2.clicked.connect(self.saveData)
    # self.layout.addWidget(self.button2)

    # Общий контур
    rect = QGraphicsRectItem(77, 30, 699, 1060)
    rect.setPen(pen)
    # Левая зона
    left1 = QGraphicsRectItem(17, 30, 60, 1060)
    left1.setPen(pen)
    left2 = QGraphicsRectItem(47, 30, 30, 392)
    left2.setPen(pen)
    left3 = QGraphicsRectItem(17, 30, 60, 196)
    left3.setPen(pen)
    left4 = QGraphicsRectItem(17, 30, 60, 392)
    left4.setPen(pen)
    left5 = QGraphicsRectItem(17, 562, 30, 528)
    left5.setPen(pen)
    left6 = QGraphicsRectItem(17, 562, 60, 112)
    left6.setPen(pen)
    left7 = QGraphicsRectItem(17, 674, 60, 84)
    left7.setPen(pen)
    left8 = QGraphicsRectItem(17, 758, 60, 112)
    left8.setPen(pen)
    left9 = QGraphicsRectItem(17, 870, 60, 112)
    left9.setPen(pen)
    left10 = QGraphicsRectItem(17, 982, 60, 90)
    left10.setPen(pen)

    # Столбцы: Поз. обозн, Наименов, Кол-во, Примечание
    poz = QGraphicsRectItem(77, 30, 76, 840)
    poz.setPen(pen)
    name = QGraphicsRectItem(153, 30, 416, 840)
    name.setPen(pen)
    count = QGraphicsRectItem(569, 30, 38, 840)
    count.setPen(pen)
    comment = QGraphicsRectItem(607, 30, 169, 840)
    comment.setPen(pen)
    head = QGraphicsRectItem(77, 30, 699, 56)
    head.setPen(pen)
    Написано
  • Как выровнять чертёж в PDF, чтобы можно было распечатать без обрезания?

    @RG2 Автор вопроса
    Vindicar, вот функция преобразования в PDF

    import sys
    from PyQt6.QtWidgets import QGraphicsScene, QGraphicsView, QGraphicsItem, QGraphicsTextItem, QGraphicsRectItem, \
    QGraphicsEllipseItem, QApplication, QWidget, QLineEdit, QLabel, QVBoxLayout, QGraphicsProxyWidget, QPushButton
    from PyQt6.QtGui import QBrush, QPen, QFont, QFontDatabase, QColor
    from PyQt6 import QtWidgets, QtCore, QtSql
    from PyQt6.QtPrintSupport import QPrinter
    from PyQt6.QtGui import QPainter
    from PyQt6 import QtWidgets, QtCore, QtPrintSupport, QtGui
    from PyQt6.QtWidgets import QGraphicsScene, QApplication, QGraphicsView, QMainWindow
    from PyQt6.QtPrintSupport import QPrinter
    from PyQt6.QtGui import QPainter
    from PyQt6.QtGui import QPageLayout, QTransform
    app = QApplication(sys.argv)
    # стили сцены и виджетов
    customfont = QFontDatabase.addApplicationFont("font.ttf")
    families = QFontDatabase.applicationFontFamilies(customfont)
    print(families)
    pen = QPen(QColor(0, 0, 0))
    pen.setWidth(1)
    font = QFont("Times", 10)

    app.setStyleSheet("""
    QLineEdit {
    text-align: center;
    background-color: "white";
    color: "black";
    border: none;
    }
    """
    +
    f"* {{ font-family: {font.family()}; font-size: {font.pointSize()}pt; }}")

    class PDFExporter:
    def __init__(self, scene):
    self.scene = scene

    def export_to_pdf(self, filename):
    printer = QPrinter(QPrinter.PrinterMode.ScreenResolution)
    printer.setOutputFormat(QPrinter.OutputFormat.NativeFormat)
    printer.setOutputFileName(filename)
    printer.setPageOrientation(QPageLayout.Orientation.Landscape)
    painter = QPainter(printer)
    self.scene.render(painter)
    painter.end()
    print(f"Exported to {filename}")

    if __name__ == '__main__':
    ex = Perechen1()
    # Create an instance of PDFExporter and export the scene to a PDF file
    exporter = PDFExporter(ex)
    exporter.export_to_pdf("output.pdf")

    app.exec()
    Написано
  • Как выровнять чертёж в PDF, чтобы можно было распечатать без обрезания?

    @RG2 Автор вопроса
    Ziptar, так код мой не влезает в тему
    Написано
  • Как предотвратить удаление одинаковых по ItemNumber строк при удалении одной строки?

    @RG2 Автор вопроса
    Вот кусок кода
    def save_button_event(self):
            try:
                selection_model = self.tree_view.selectionModel()
                selected_indexes = selection_model.selectedIndexes()
    
                # Проверка, что выбран хотя бы один индекс
                if not selected_indexes:
                    print("Выберите ячейки для сохранения.")
                    self.status_label.setText("Выберите ячейки для сохранения.")
                    return
    
                updated_rows = defaultdict(list)
    
                for index in selected_indexes:
                    row = index.row()
                    column = index.column()
                    item = self.tree_model.itemFromIndex(index)
                    if item is not None:
                        value = item.text()
                        updated_rows[row].append((column, value))
    
                for row, columns in updated_rows.items():
                    parent_index = selected_indexes[0].parent()
    
                    # Проверяем, что родительский элемент существует
                    if not parent_index.isValid():
                        print(f"Не удалось найти родительский элемент для строки {row}.")
                        error_message = "Не удалось найти родительский элемент для строки " + str(row)
                        self.status_label.setText(error_message)
                        continue
    
                    parent_item = self.tree_model.itemFromIndex(parent_index)
                    class_part = parent_item.text()
    
                    # Получаем значения для обновления из строки
                    part_reference_index = self.tree_model.index(row, 0, parent_index)
                    manufacturer_part_number_index = self.tree_model.index(row, 1, parent_index)
                    manufacturer_index = self.tree_model.index(row, 2, parent_index)
                    quantity_index = self.tree_model.index(row, 3, parent_index)
                    description_index = self.tree_model.index(row, 4, parent_index)
                    item_number_index = self.tree_model.index(row, 5, parent_index)
                    part_reference_item = self.tree_model.itemFromIndex(part_reference_index)
                    manufacturer_part_number_item = self.tree_model.itemFromIndex(manufacturer_part_number_index)
                    manufacturer_item = self.tree_model.itemFromIndex(manufacturer_index)
                    quantity_item = self.tree_model.itemFromIndex(quantity_index)
                    description_item = self.tree_model.itemFromIndex(description_index)
                    item_number_item = self.tree_model.itemFromIndex(item_number_index)
    
                    # Проверяем, что все необходимые элементы строки не None
                    if None in (part_reference_item, manufacturer_part_number_item, manufacturer_item, quantity_item, description_item, item_number_item):
                        print(f"Не удалось получить все элементы строки {row}.")
                        error_message = "Не удалось получить все элементы строки " + str(row)
                        self.status_label.setText(error_message)
                        continue
    
                    part_reference = part_reference_item.text()
                    manufacturer_part_number = manufacturer_part_number_item.text()
                    manufacturer = manufacturer_item.text()
                    quantity = quantity_item.text()
                    description = description_item.text()
                    itemnumber = item_number_item.text()
                    print("Параметры запроса:")
                    print(f"ClassPart: {class_part}")
                    print(f"PartReference: {part_reference}")
                    print(f"ManufacturerPartNumber: {manufacturer_part_number}")
                    print(f"Manufacturer: {manufacturer}")
                    print(f"Quantity: {quantity}")
                    print(f"Description: {description}")
                    print(f"ItemNumber: {itemnumber}")
    
                    # Проверяем наличие дубликатов по PartReference для существующих индексов, кроме текущего
                    query_check = QtSql.QSqlQuery()
                    query_check.prepare("SELECT COUNT(*) FROM RAWDATA WHERE PartReference = :part_reference")
                    query_check.bindValue(":part_reference", part_reference)
                    query_check.exec()
                    query_check.next()
                    count = query_check.value(0)
                    if count > 0:  # Если count > 0, значит PartReference уже существует
                        if any(value == '-' for _, value in columns):  # Проверка для новой строки
                            self.tree_model.removeRow(row, parent_index)
                            print(f"Новая строка с PartReference '{part_reference}' уже существует и была удалена.")
                            warning_message = f"Новая строка с PartReference '{part_reference}' уже существует и была удалена."
                        else:
                            print(f"Предупреждение: PartReference '{part_reference}' уже существует. Изменение не будет сохранено.")
                            warning_message = f"Предупреждение: PartReference '{part_reference}' уже существует. Изменение не будет сохранено."
                        self.status_label.setText(warning_message)
                        continue
    
                    # Обновляем данные в базе данных только для текущего индекса
                    query = QtSql.QSqlQuery()
                    query.prepare("UPDATE RAWDATA SET PartReference = :part_reference, \
                                   ManufacturerPartNumber = :manufacturer_part_number, \
                                   Manufacturer = :manufacturer, \
                                   Quantity = :quantity, \
                                   Description = :description, \
                                   ItemNumber = :itemnumber \
                                   WHERE ClassPart = :class_part AND ItemNumber = :old_item_number")
    
                    query.bindValue(":part_reference", part_reference)
                    query.bindValue(":manufacturer_part_number", manufacturer_part_number)
                    query.bindValue(":manufacturer", manufacturer)
                    query.bindValue(":quantity", quantity)
                    query.bindValue(":description", description)
                    query.bindValue(":itemnumber", itemnumber)
                    query.bindValue(":class_part", class_part)
                    query.bindValue(":old_item_number", itemnumber)
    
                    if not query.exec():
                        print("Ошибка выполнения запроса:", query.lastError().text())
                        error_message = "Ошибка выполнения запроса: " + query.lastError().text()
                        self.status_label.setText(error_message)
                    else:
                        print("Данные сохранены успешно.")
                        self.status_label.setText("Данные сохранены успешно.")
    
            except Exception as e:
                print("Произошла ошибка:", str(e))
                error_message = "Произошла ошибка: " + str(e)
                self.status_label.setText(error_message)
    Написано
  • Как предотвратить удаление одинаковых по ItemNumber строк при удалении одной строки?

    @RG2 Автор вопроса
    Александр Чуйко, нет, это не коммерческий. Мне нужно просто решить проблему с дубликатами, которые возникают, когда я пытаюсь отредактировать или удалить ту или иную строку. Я удаляю одну строку, а вслед за ней удаляются и другие, одинаковые по ItemNumber. Этого быть не должно в принципе. Удаляться должна только одна строка, выбранная пользователем.
    Написано
  • Какой существует сайт, где можно преобразовать текст в аудиофайл, используя пользовательскую модель?

    @RG2 Автор вопроса
    Просто я хочу создать программу, которая преобразует текст в аудио при помощи модели. Каждый раз, когда я что-то пробую писать, возникает ошибка: то версия того или иного пакета слишком новая, то она слишком старая, то значения в каком-то пакете неверные, то версия Питона не подходящая.
  • Почему парсер сайта kinopoisk выдаёт пустой список?

    @RG2 Автор вопроса
    Вот бы был код, который бы работал, даже когда менялись бы названия классов на сайте kinopoisk. А то создают однолетки.
  • Почему парсер сайта kinopoisk выдаёт пустой список?

    @RG2 Автор вопроса
    Давно заметил, что классы в Kinopoiske изменяют название. Много кто на форуме писал коды парсинга с сайта - все они работали 1-2 года, после чего становились бессмысленными.
  • Ошибка json.decoder.JSONDecodeError: Extra data: line 6 column 3 (char 308), как её решить?

    @RG2 Автор вопроса
    Убрал replace. Ничего не изменилось.
  • Как правильно преобразовать при помощи python данные с json в таблицу mysql (формат db)?

    @RG2 Автор вопроса
    Исправил.
    Заменил pd.DataFrame(mate) на pd.json_normalize(mate)
    Помогло.
  • Как сделать так, чтобы в парсере статус определялся автоматически?

    @RG2 Автор вопроса
    Нужно, чтобы в "Статус" функция была автоматическая. То есть, если в таблице написано "Заявки не принимаются", значит, должно быть написано в парсере "Заявки не принимаются", а если "Конкурс завершен" - то "Конкурс завершен". Есть ли код, который возвращает на главную страницу конкурсов и оттуда извлекает название в таблице?
  • Как извлечь выделенное определенным цветом слово?

    @RG2 Автор вопроса
    chemdev, ладно. Я попробую сделать иначе.