Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: pyqt QPlainTextEdit  (Прочитано 1430 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Xiber

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
  • maemo4 user
    • Просмотр профиля
pyqt QPlainTextEdit
« : 13 Февраль 2010, 22:03:07 »
как по событию( нажатию кнопки)
добавить символ у курсора, по его юникоду



Оффлайн dartNNN

  • Новичок
  • *
  • Сообщений: 32
    • Просмотр профиля
Re: pyqt QPlainTextEdit
« Ответ #1 : 14 Февраль 2010, 09:33:13 »
QPlainTextEdit.insertPlainText (self, QString) (вообще то вместе с pyqt идет ПОЛНАЯ документация)
Получить символ по юникоду проблема? (просто я пишу на 3.0, если у вас 2.х, то там по разному работа со строками)
Из инструкции к самолету:
после выпуска поезд доработать напильником

Оффлайн Xiber

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
  • maemo4 user
    • Просмотр профиля
Re: pyqt QPlainTextEdit
« Ответ #2 : 14 Февраль 2010, 11:46:52 »
спасибо

тогда ещё вопрос
где в pyqt документация, и как ей пользоваться :)

Оффлайн dartNNN

  • Новичок
  • *
  • Сообщений: 32
    • Просмотр профиля
Re: pyqt QPlainTextEdit
« Ответ #3 : 14 Февраль 2010, 15:35:20 »
Точно не знаю (у меня pyqt только на винду сел), но должно быть где-то здесь: /usr/share/doc/python-pyqt[или как-то так, найти не сложно]/
Там pyqt4ref.html файл с введением, а в нем (в первой главе введения) ссылка "PyQt API Reference". Там столько всего интересного:)))
Из инструкции к самолету:
после выпуска поезд доработать напильником

Оффлайн Xiber

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
  • maemo4 user
    • Просмотр профиля
Re: pyqt QPlainTextEdit
« Ответ #4 : 15 Февраль 2010, 17:46:40 »
не нашёл, но это не беда

появился ещё один вопрос

есть массив кнопок, как в функцию-слот передать значение, какая кнопка была нажата
можно решить в лоб написать 30 слотов, но это не спортивно

вроде можно создать наследника QPushButton и в нём создать свой сигнал, но это для меня сложновато, пока

можно ли решить вопрос элегантно?

Оффлайн blindvic

  • Участник
  • *
  • Сообщений: 179
    • Просмотр профиля
Re: pyqt QPlainTextEdit
« Ответ #5 : 15 Февраль 2010, 21:54:11 »
есть массив кнопок, как в функцию-слот передать значение, какая кнопка была нажата
можно решить в лоб написать 30 слотов, но это не спортивно
1. Если кнопки создаются программно, тогда создавая каждую в лоб связвай сигнал со слотом.
2. Если через дизайнер - ручками связывай слоты.
3. Либо, если имена кнопок имеют особый паттерн, при переборе виджетов назначай на них слоты. Что-то похожее на (код не для твоего случая, из реальной программы, Питон 3.1):
           for child in form.children() :
                child_name = child.objectName()

                def bind ( signal_name ) :
                    try :
                        getattr ( child,  signal_name ).connect ( getattr ( module, "on_{}_{}".format( child_name, signal_name ) ) )
                    except Exception as err:
                        pass

                if isinstance ( child, QTextEdit ) :
                    bind ( "textChanged" )
                elif isinstance ( child, QCheckBox ) :
                    bind ( "stateChanged" )
                elif isinstance ( child, QLineEdit ) :
                    bind ( "textEdited" )
                elif isinstance ( child, QPushButton ) :
                    bind ( "clicked" )
Кажется я не на тот вопрос ответил.
не нашёл, но это не беда

появился ещё один вопрос

есть массив кнопок, как в функцию-слот передать значение, какая кнопка была нажата
можно решить в лоб написать 30 слотов, но это не спортивно

вроде можно создать наследника QPushButton и в нём создать свой сигнал, но это для меня сложновато, пока

можно ли решить вопрос элегантно?

По идее, что-то вроде:
       def buttonConnect ( button, code ) :
            button.clicked.connect ( lambda : self.buttonClicked ( code ) )

        buttonConnect ( self.digitButton_0, '0' ); buttonConnect ( self.digitButton_1, '1' )
        buttonConnect ( self.digitButton_2, '2' ); buttonConnect ( self.digitButton_3, '3' )
        buttonConnect ( self.digitButton_4, '4' ); buttonConnect ( self.digitButton_5, '5' )
        buttonConnect ( self.digitButton_6, '6' ); buttonConnect ( self.digitButton_7, '7' )
        buttonConnect ( self.digitButton_8, '8' ); buttonConnect ( self.digitButton_9, '9' )
        buttonConnect ( self.pointButton, '.' ); buttonConnect ( self.changeSignButton, '+/-' )
        buttonConnect ( self.backspaceButton, 'b' ); buttonConnect ( self.clearButton, 'c' )
        buttonConnect ( self.divideButton, '/' ); buttonConnect ( self.multiplyButton, '*' )
        buttonConnect ( self.minusButton, '-' ); buttonConnect ( self.plusButton, '+' )
        buttonConnect ( self.equalButton, '=' ); buttonConnect ( self.squareRootButton, 'sqrt' )
        buttonConnect ( self.powerButton, 'x**2' ); buttonConnect ( self.reciprocalButton, '1/x' )
        buttonConnect ( self.percentButton, '%' )
        self.okButton.clicked.connect ( self.okButtonClicked )
 
    def buttonClicked ( self, code ) :
        expr = str ( self.display.text () )
        if code == 'b' : # backspace
            self.display.setText ( expr [ : -1 ] )
« Последнее редактирование: 15 Февраль 2010, 22:00:29 от blindvic »

Оффлайн dartNNN

  • Новичок
  • *
  • Сообщений: 32
    • Просмотр профиля
Re: pyqt QPlainTextEdit
« Ответ #6 : 16 Февраль 2010, 16:25:41 »
А еще можно исправить саму программу, потому что 30 кнопок - само по себе не спортивно:)
Из инструкции к самолету:
после выпуска поезд доработать напильником

Оффлайн Xiber

  • Автор темы
  • Любитель
  • *
  • Сообщений: 94
  • maemo4 user
    • Просмотр профиля
Re: pyqt QPlainTextEdit
« Ответ #7 : 17 Февраль 2010, 17:46:06 »
А еще можно исправить саму программу, потому что 30 кнопок - само по себе не спортивно:)
а как тогда реализовать виртуальную клавиатуру, без 30 кнопок
их и то не хватает
приходится добавлять ещё шифты и прочие модификаторы

2blindvic
большое спасибо, второй кусок кода ( как я понял от "калькулятора") очень помог
« Последнее редактирование: 17 Февраль 2010, 17:47:51 от Xiber »

Оффлайн blindvic

  • Участник
  • *
  • Сообщений: 179
    • Просмотр профиля
Re: pyqt QPlainTextEdit
« Ответ #8 : 17 Февраль 2010, 21:25:55 »
большое спасибо, второй кусок кода ( как я понял от "калькулятора") очень помог
можно использовать и QObject.sender(), но это не рекомендуется:
http://stackoverflow.com/questions/1063734/pyqt-consolidating-signals-to-a-single-slot

там рекомендуют QSignalMapper. ну, мне самому когда-нибудь до этого дойти надо :)
« Последнее редактирование: 17 Февраль 2010, 21:31:21 от blindvic »

 

Страница сгенерирована за 0.057 секунд. Запросов: 24.