Примеры по PyQt

Администратор
Андрей Столяров
Медаль
Сообщений: 214
Санкт-Петербург
3 дня назад
Пример (минималистичный) на использование класса QLineEdit() - поле для ввода текста


Код PYTHON:
  1. import sys
  2. from PyQt4 import QtGui
  3. from PyQt4.QtCore import SIGNAL
  4. def main():# Основная процедура программы
  5. app = QtGui.QApplication(sys.argv)# Создаем объект app (приложение) - экземпляр класса QApplication
  6. w = QtGui.QWidget() # Создаем объект w - окно - экземпляр класса QWidget()
  7. w.resize(250, 30) # Вызываем метод resize объекта w
  8. e = QtGui.QLineEdit(w) # Создаем объект e - поле ввода - экземпляр класса QLineEdit(), дочерний по отношению к w
  9. w.connect(e, SIGNAL('textChanged(QString)'), foo) #Связали процедуру foo с событием изменение текста
  10. w.show() # Отображаем окно
  11. sys.exit(app.exec_()) #Запускаем цикл обработки событий объекта app (приложение)
  12. def foo(s): #Объявляем процедуру foo
  13. print (s)
  14. if __name__ == '__main__':
  15. main() #Запускаем программу
  16.  
Редактировалось: 8 раз (Последний: 8 декабря 2014 в 15:07)
Администратор
Андрей Столяров
Медаль
Сообщений: 214
Санкт-Петербург
3 дня назад
Универсальная программа с использованием PyQt4 для вычисления функции двух переменных.
Демонстрируется создание собственного класса окна MyWindow (в учебных целях).
Подобный эффект мог быть достигнут без создания нового класса (см. предыдущий пример)

Код PYTHON:
  1. from PyQt4 import QtCore, QtGui
  2. class MyWindow(QtGui.QWidget): #Объявляем класс MyWindow, наследующий свойства класса QWidget модуля QtGui
  3.  
  4. def __init__ (self, parent=None): #Объявляем процедуру -конструктор класса MyWindow
  5. QtGui.QWidget.__init__ (self, parent) #Сначала выполняем действия, предусмотренные конструктором родительского класса (QWidget)
  6. self.label1= QtGui.QLabel("Показатель адиабаты") # Создали объект надпись класса QLabel
  7. self.label2= QtGui.QLabel("Коэффициент скорости") # Создали объект надпись класса QLabel
  8. self.Edit1 = QtGui.QLineEdit("1.4")# Создали объект поле ввода
  9. self.Edit2 = QtGui.QLineEdit("1")# Создали объект поле ввода
  10. self.btnQuit = QtGui.QPushButton("Close") # Создали объект кнопка, экземпляр класса QPushButton
  11. self.Button1 = QtGui.QPushButton("Вычислить") # Создали объект кнопка, экземпляр класса QPushButton
  12. self.plainTextEdit=QtGui.QPlainTextEdit()# Создали объект поле многострочного ввода, экземпляр класса QPlainTextEdit
  13. self.hbox = QtGui.QHBoxLayout()# Создали объект горизонтальный контейнер, экземпляр класса QHBoxLayout
  14. self.vbox = QtGui.QVBoxLayout()# Создали объект вертикальный контейнер, экземпляр класса QVBoxLayout
  15. self.vbox2 = QtGui.QVBoxLayout()# Создали объект вертикальный контейнер, экземпляр класса QVBoxLayout
  16. self.vbox.addWidget(self.label1)# Добавили объект надпись в вертикальный контейнер
  17. self.vbox.addWidget(self.Edit1)# Добавили объект поле ввода в вертикальный контейнер
  18. self.vbox.addWidget(self.label2)# Добавили объект надпись в вертикальный контейнер
  19. self.vbox.addWidget(self.Edit2)# Добавили объект поле ввода в вертикальный контейнер
  20. self.vbox.addWidget(self.Button1)# Добавили объект кнопка в вертикальный контейнер
  21. self.vbox.addWidget(self.btnQuit)# Добавили объект кнопка в вертикальный контейнер
  22. self.hbox.addLayout(self.vbox)# Добавили объект котнтейнер в вертикальный контейнер
  23. self.hbox.addLayout(self.vbox2)# Добавили объект котнтейнер в горизонтальный контейнер
  24. self.vbox2.addWidget(self.plainTextEdit)# Добавили объект поле многострочного ввода в вертикальный контейнер
  25. self.setLayout(self.hbox)# Установили горизонтальный контейнер в качестве рабочей области собственного объекта класса MyWindow(
  26. self. connect (self. btnQuit, QtCore. SIGNAL ( "clicked () ") ,QtGui.qApp.quit)#Связали процедуру QtGui.qApp.quit с событием нажатия на кнопку btnQuit
  27. self.connect(self.Button1,QtCore.SIGNAL("clicked()"),self.calculate)#Связали процедуру calculate с событием нажатия на кнопку Button1
  28.  
  29.  
  30. def calculate(self): #Объявление процедуры calculate - метода объекта класса MyWindow
  31. λ=float(self.Edit2.text()) # Читаем значение из поля ввода в переменную λ
  32. k=float(self.Edit1.text()) # Читаем значение из поля ввода в переменную k
  33. τ=1-(k-1)/(k+1)*λ**2 # Вычисляем
  34. self.plainTextEdit.setPlainText("τ="+str(τ))# Записываем атрибут PlainText объекта PlainTextEdit
  35.  
  36.  
  37.  
  38. if __name__ == '__main__':# Основная процедура программы
  39. import sys
  40. app = QtGui.QApplication(sys.argv)# Создаем объект app (приложение) - экземпляр класса QApplication
  41. window = MyWindow() # Создаем объект window - экземпляр класса MyWindow()
  42. window.setWindowTitle("Газодинамическая функциия τ") #Записываем атрибут WindowTitle объекта window
  43. window.resize(300, 50) #Установили размеры окна
  44. window. show () # Отображаем окно
  45. sys.exit(app.exec_()) #Запускаем цикл обработки событий объекта app (приложение)
  46.  
Редактировалось: 2 раза (Последний: 8 декабря 2014 в 15:07)
Администратор
Андрей Столяров
Медаль
Сообщений: 214
Санкт-Петербург
3 дня назад
Развитие универсальной программы с использованием PyQt4 для вычисления функции двух переменных.
Добавлено построение графика.
Код PYTHON:
  1.  
  2. # -*- coding: utf-8 -*-
  3. # Copyright: (c) Andrey Stolyarov 2014
  4. # Licence: GNU General Public License version 3 , see <http://www.gnu.org/licenses/>.
  5.  
  6. import sys # Подключаем модуль sys
  7. import numpy as np # Подключаем библиотеку numpy и даём ей псевдоним np
  8. import matplotlib as mpl # Подключаем библиотеку matplotlib и даём ей псевдоним mpl
  9. from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
  10. # Импортируем из модуля backend_qt4agg библиотеки matplotlib.backends
  11. # класс FigureCanvasQTAgg и даём ему псевдоним FigureCanvas
  12. from matplotlib.figure import Figure
  13. # Импортируем из модуля figure библиотеки matplotlib класс Figure
  14. mpl.rcParams['font.family'] = 'fantasy'
  15. mpl.rcParams['font.fantasy'] = 'Arial'
  16. from PyQt4 import QtCore, QtGui
  17. class MyWindow(QtGui.QWidget): #Объявляем класс MyWindow, наследующий свойства класса QWidget модуля QtGui
  18. def __init__ (self, parent=None): #Объявляем процедуру -конструктор класса MyWindow
  19. QtGui.QWidget.__init__ (self, parent) #Сначала выполняем действия, предусмотренные конструктором родительского класса (QWidget)
  20. self.label1= QtGui.QLabel("Показатель адиабаты") # Создали объект надпись класса QLabel
  21. self.label2= QtGui.QLabel("Коэффициент скорости") # Создали объект надпись класса QLabel
  22. self.Edit1 = QtGui.QLineEdit("1.4")# Создали объект поле ввода
  23. self.Edit2 = QtGui.QLineEdit("1")# Создали объект поле ввода
  24. self.btnQuit = QtGui.QPushButton("Close") # Создали объект кнопка, экземпляр класса QPushButton
  25. self.Button1 = QtGui.QPushButton("Вычислить") # Создали объект кнопка, экземпляр класса QPushButton
  26. self.plainTextEdit=QtGui.QPlainTextEdit()# Создали объект поле многострочного ввода, экземпляр класса QPlainTextEdit
  27. self.hbox = QtGui.QHBoxLayout()# Создали объект горизонтальный контейнер, экземпляр класса QHBoxLayout
  28. self.vbox = QtGui.QVBoxLayout()# Создали объект вертикальный контейнер, экземпляр класса QVBoxLayout
  29. self.vbox2 = QtGui.QVBoxLayout()# Создали объект вертикальный контейнер, экземпляр класса QVBoxLayout
  30.  
  31. self.hbox.addWidget(self.label1)# Добавили объект надпись в вертикальный контейнер
  32. self.hbox.addWidget(self.Edit1)# Добавили объект поле ввода в вертикальный контейнер
  33. self.hbox.addWidget(self.label2)# Добавили объект надпись в вертикальный контейнер
  34. self.hbox.addWidget(self.Edit2)# Добавили объект поле ввода в вертикальный контейнер
  35. self.hbox.addWidget(self.Button1)# Добавили объект кнопка в вертикальный контейнер
  36. self.vbox2.addLayout(self.hbox)# Добавили объект котнтейнер в горизонтальный контейнер
  37.  
  38. self.figure = Figure() # Создали объект figure, экземпляр класса Figure
  39. self.axes = self.figure.add_subplot( 111 ) # С помощью метода add_subplot класса Figure создали объект axes, экземпляр класса AxesSubplot
  40. ### 111 - это признак расположения на листе (для случая отображения нескольких графиков)
  41. self.canvas = FigureCanvas( self.figure )# Создали объект canvas, экземпляр класса FigureCanvas
  42.  
  43. self.vbox2.addWidget(self.canvas) # Добавили объект canvas в вертикальный контейнер
  44. self.vbox2.addWidget(self.plainTextEdit)# Добавили объект поле многострочного ввода в вертикальный контейнер
  45. self.vbox2.addWidget(self.btnQuit) # Добавили объект кнопка в вертикальный контейнер
  46.  
  47. self.setLayout(self.vbox2) # Установили горизонтальный контейнер в качестве рабочей области класса MyWindow
  48. self. connect (self. btnQuit, QtCore. SIGNAL ( "clicked () ") ,QtGui.qApp.quit)#Связали процедуру QtGui.qApp.quit с событием нажатия на кнопку btnQuit
  49. self.connect(self.Button1,QtCore.SIGNAL("clicked()"),self.calculate)#Связали процедуру calculate с событием нажатия на кнопку Button1
  50.  
  51. def calculate(self): #Объявление процедуры calculate - метода объекта класса MyWindow
  52. λ=float(self.Edit2.text()) # Читаем значение из поля ввода в переменную λ
  53. k=float(self.Edit1.text()) # Читаем значение из поля ввода в переменную k
  54. τ=1-(k-1)/(k+1)*λ**2 # Вычисляем τ
  55. self.plainTextEdit.appendPlainText("λ="+str(λ)+", τ="+str(τ))# Записываем атрибут PlainText объекта PlainTextEdit
  56. x=np.arange(0,3,0.1) #Массив значений аргумента
  57. y=1-(k-1)/(k+1)*x**2 #Создание массива значений функции как операция над массивом
  58. #обеспечивается библиотекой numpy (np)
  59. self.axes.clear() # Очищаем область построения графика
  60. self.axes.plot(x,y,label="τ(λ)") # Строим график
  61. self.axes.set_xbound(lower=0, upper=x.max()) # Устанавливаем диапазон оси X
  62. self.axes.set_ybound(lower=0, upper=1.1) # Устанавливаем диапазон оси Y
  63. self.axes.set_xlabel('λ') # Дали имя оси X
  64. self.axes.set_ylabel('τ') # Дали имя оси Y
  65. self.axes.grid(True) # Добавили сетку
  66. self.axes.legend() # Добавили легенду
  67. self.canvas.draw() # Орисовываем график
  68.  
  69. if __name__ == '__main__': # Основная процедура программы
  70. app = QtGui.QApplication(sys.argv)# Создаем объект app (приложение) - экземпляр класса QApplication
  71. window = MyWindow() # Создаем объект window - экземпляр класса MyWindow()
  72. window.setWindowTitle("Газодинамическая функциия τ") #Записываем атрибут WindowTitle объекта window
  73. window.resize(600, 600) #Установили размеры окна
  74. window.show () # Отображаем окно
  75. window.calculate() # Запускаем процедуру calculate() чтобы отрисовать график при запуске
  76. sys.exit(app.exec_()) #Запускаем цикл обработки событий объекта app (приложение)
  77.  
  78.  
Администратор
Андрей Столяров
Медаль
Сообщений: 214
Санкт-Петербург
3 дня назад
Хорошие примеры на PyQt (на английском)
Администратор
Андрей Столяров
Медаль
Сообщений: 214
Санкт-Петербург
3 дня назад
Простое сообщение
Код PYTHON:
  1. QtGui.QMessageBox.information(self, 'Message', "Привет!")
Диалог с запросом подтверждения действия
Код PYTHON:
  1.  
  2. reply = QtGui.QMessageBox.question(self, 'Message', "Are you sure to quit?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
  3.  
  4. if reply == QtGui.QMessageBox.Yes:
  5. event.accept()
  6. else:
  7. event.ignore()
Редактировалось: 2 раза (Последний: 29 июня 2015 в 12:12)
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.