Форум программистов, компьютерный форум, киберфорум
iamvic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
Путевые заметки в процессе познания Python и PyQt/PySide.
Помни - только тег CODE не портит код добавлением пробела в начало пустой строки.

К вопросу о "дарах данайцев"...

Запись от iamvic размещена 18.06.2023 в 15:59
Показов 1229 Комментарии 0
Метки opensuse, pyqt5, python, python 3

Тема, начатая в заметке К вопросу о локализации приложений PyQt, всё-таки потребовала продолжения. Огромное спасибо коллеге vic5710, написавшему замечательный код Рисование в отдельном окне по параметрам, заданным в текстовых окнах, работающий практически везде (и под Windows, и под MacOs, и под Linux разных сортов), за одним найденным исключением - он абсолютно неработоспособен под OpenSUSE

Чтобы разобраться с тем, что там происходит, был написан такой простенький демонстратор:

gift_probe.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
 
from PyQt5.QtCore import (
    pyqtSlot
    )
from PyQt5.QtWidgets import (
    QApplication,
    QGridLayout,
    QLabel,
    QMainWindow,
    QPushButton,
    QVBoxLayout,
    QWidget
    )
 
APP_NAME = 'Greek Gift Probe v0.001'
 
class Main_window(QMainWindow):
    """Главное окно приложения
    """
    def __init__(self, parent=None):
        """Конструктор
        """
        super(Main_window, self).__init__(parent)
        self.setWindowTitle('Нажми на кнопку')
 
        self.cmd_set = [['Стой',  'Бегом',  'Ложись', 'Бойся'],
                        ['Halt', 'At the double', 'Lie down', 'Alarm']]
        self.answer_set = ['стою', 'бегу', 'лежу', 'боюсь']
 
        self.grid = QGridLayout(None)
        self.grid.setContentsMargins(1, 1, 1, 1)
 
        for j in range(len(self.cmd_set)):
            for i in range(len(self.cmd_set[j])):
                btn = QPushButton(self.cmd_set[j][i], self)
                btn.setToolTip(self.cmd_set[j][i])
                btn.setToolTipDuration(10)
                btn.pressed.connect(self.on_pushbutton_pressed)
                btn.released.connect(self.on_pushbutton_released)
                self.grid.addWidget(btn, i, j, 1, 1)
 
        self.info_text = QLabel(self)
 
        main_map = QVBoxLayout(None)
        main_map.addStretch(1)
        main_map.addWidget(self.info_text)
        main_map.addLayout(self.grid)
        main_map.addStretch(1)
 
        central_widget = QWidget(self)
        central_widget.setLayout(main_map)
        self.setCentralWidget(central_widget)
 
    @pyqtSlot()
    def on_pushbutton_pressed(self):
        x = self.grid.indexOf(self.sender())
        i = x if x < len(self.answer_set) else x - len(self.answer_set)
        if self.sender().text() == self.sender().toolTip():
            self.info_text.setText(
                'По команде <b>{!s}!</b> - {!s}'
                ''.format(self.sender().text(), self.answer_set[i])
                )
        else:
            self.info_text.setText(
                'На неизвестную команду <b>{!s}!</b> отвечаю'
                ' <b>Так точно!<b>'.format(self.sender().text())
                )
        pass
 
    @pyqtSlot()
    def on_pushbutton_released(self):
        self.info_text.setText('')
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
 
    mwin = Main_window()
    mwin.show()
    sys.exit(app.exec_())
который позволяет определиться с ответом на вопрос "Кто виноват и что делать?".

Оказывается, что под OpenSUSE вызов метода QPushButton.text() может возвращать совсем не тот текст, который ранее был использован при вызове метода QPushButton.setText() для данного экземпляра класса QPushButton. Для получения такого эффекта достаточно, чтобы текст содержал символы латиницы, и тогда система сама умело украсит его вставкой символа "амперсанд" в какую-то позицию строки, чтобы обеспечить возможность быстрого доступа к данному виджету с помощью комбинации клавиш Alt+буква_латиницы.

Прилагаемые картинки иллюстрируют процесс (под рукой как раз была старенькая OpenSUSE 42.3 и что-то мне подсказывает, что и в актуальной 15.4 дела обстоят не лучше):

текст нажатой кнопки не содержит латиницы
Нажмите на изображение для увеличения
Название: suse_good.png
Просмотров: 265
Размер:	24.4 Кб
ID:	8098

текст нажатой кнопки содержит латиницу
Нажмите на изображение для увеличения
Название: suse_bad.png
Просмотров: 279
Размер:	28.7 Кб
ID:	8099

нажата клавиша Alt (появились подчёркивания под клавишами быстрого доступа)
Нажмите на изображение для увеличения
Название: suse_alt.png
Просмотров: 264
Размер:	19.4 Кб
ID:	8100

Вопрос "Что с этим делать?" требует дальнейшего осмысления. Ну и проверить надо, что там Qt Designer творит в таких условиях. Сериал будет продолжен...
Метки opensuse, pyqt5, python, python 3
Размещено в Памятка
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru