Примеры
Официальная документация
Введение на русском
Документация по классам ENG
Hello World
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
window.setWindowTitle(" ")
window.resize(100, 30)
label = QtGui.QLabel("<center>Привет, мир!</center>")
#btnQuit = QtGui.QPushButton("&Закрыть окно")
vbox = QtGui.QVBoxLayout()
vbox.addWidget(label)
#vbox.addWidget(btnQuit)
window.setLayout(vbox)
#QtCore.QObject.connect(btnQuit, QtCore.SIGNAL("clicked()"), QtGui.qApp, QtCore.SLOT("quit()"))
window.show()
sys.exit(app.exec_())
QtGui
QtGui.QLabel
Надпись внутри окна
some = QtGui.QLabel(“<center>Привет, мир!</center>”) #Сама надпись
some.label.setAlignment(QtCore.Qt.AlignCenter) #Указать выравнивоние
some.setText(“Мой текст”) #Назначаем\изменяем текст
Слоты
Кнопка внутри окна
Сигналы
QtGui.qApp
QtGui.QVBoxLayout()
Вертикальный контейнер. Все другие объекты добавляется в него как на основу.
В конце, вставляем его в QtGui.QWidget.setLayout(Объект_QVBoxLa..)
создает объект окна с помощью класса QWidget. Этот класс наследуют практически все
классы, реализующие компоненты графического интерфейса.
self.setWindowTitle(“Загаловок”) #Заголовок окна
self.resize(100, 30) #Рекомендуемый размер окна
self.setLayout(Наш_QVBoxLayout или другие объекты) #Отображаемый слой
self.show() #Создаем (показываем) наше окно.
self.hide() #Делаем окно невидимым.
self.setWindowFlags() #Задает тип окна. Допустимые значения: Window/Dialog/Sheet/Drawer/Popup/Tool/SplashScreen/Desktop/SubWindow/MSWindowsFixedSizeDialogHint/FramelessWindowHint/WindowStaysOnTopHint/и т.д.
self.windowType() #Получаем текущее значение setWindowFlags
showMinimized() #Свернуть
showMaximized() #развернуть
showFullScreen() #Фулскрин
showNormal()
activateWindow()
isMinimized()
isMaximized()
isFullScreen()
isActiveWindow()
windowState()
def closeEvent(self, event): # Метод вызываемый при закрытии основного окна
...
event.accept() #Метод события. Позволяем закрыть окно.
event.ignore() #Может наоборот, проигнорировать событие и отказаться закрывать окно.
Изменяем фон объектов
window = QtGui.QWidget()
pal = window.palette()
pal.setColor(QtGui.QPalette.Normal, QtGui.QPalette.Window, QtGui.QColor("#008800"))
pal.setColor(QtGui.QPalette.Inactive, QtGui.QPalette.Window, QtGui.QColor("#ff0000"))
window.setPalette(pal)
label = QtGui.QLabel("Текст надписи")
label.setAlignment(QtCore.Qt.AlignCenter)
label.setStyleSheet("background-color: #ffffff;")
QtGui.QSplashScreen
Сплэш изображение по среди экрана. (Обычно для заставки)
QtGui.QSplashScreen([<Родитель>, ][<Изображение>[, <Тип окна>]])
Родитель - не обязательный параметр
Изображение: QtGui.QPixmap(“logo3.png”)
тип окна: QtCore.Qt.WindowStaysOnTopHint - всегда на верху.
Методы:
some.show() #Отображаем сплэш
finish(<Ссылка на окно>) #закрывыем окно с отображением главного окна
showMessage(<Сообщение>[,<Выравнивание>[,<Цвет>]]) #Выравнивание - QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom . Указывается через “|” #Цвет - QtCore.Qt.white или QtGui.QColor(“#ff0000”)
clearMessage() #Стираем надпись
setPixmap(QtGui.QPixmap(“logo3.png”)) — позволяет изменить изображение.
QtCore
QtCore.QObject
QtCore.QThread
Главное:
Второстепенное:
some.emit(QtCore.SIGNAL(“mysignal(QString)”), “i = %s” % i) #Вызываем сигнал с данными из треда.
some.sleep(3) #Желательный вид сна для треда; msleep - милисекунды
some.wait(50) #Ожидаем завершения рыботы треда. В значение можем указать милисекунды, то истечению которых продолжаем выполнять последующий код. Если завершился до истечения времени - True, если не успел завершиться - False
some.isRunning() #Если тред запущен, то True
some.isFinished() #Если тред не запущен, то True
some.exec_() # Запускает цикл для принятия сигналов. #К примеру, в run() определить только exec_ и запустить тред. А потом просто обрабатывать полученные сигналы.
Сигналы от тредов
QtCore.SIGNAL(“clicked()”)
QtCore.SIGNAL(“started()”)
QtCore.SIGNAL(“finished()”)
Назначенные нами в (inTread)self.emit(QtCore.SIGNAL(“mysignal(QString)”), “i = %s” % i) #Для str используем
QString для int используем int
QtCore.QMutex
Блокировки данных, при использование многопоточности.
some.mutex.lock()
...
...
some.mutex.unlock()
Когда 2 треда будут обращаться к одним данным для изменения, второй будет в ожидание пока не получит доступа к данным.
Автоматически снимаем блокировку при выходе из области видимости
def Some():
mutex = QtCore.QMutex()
MyData = 100
def OtherSome:
ml = QtCore.QMutexLocker(MyThread.mutex) # блокируются доступ к MyData для остальных тредов программы
...
... #При выходе из функции(области видимости) блокировка снимается.
Многопоточность
Здесь дублируются функции приведенные выше.
Обработка цикла основного окна
Треды
Создаем класс с наследованием QtCore.QThread
В классе треда создаем метод run от куда и будет выполняться код.
выставляем точку запуска треда через НашТред.start()
Подкчючаем сигналы для взаимодействия с тредом
class MyThread(QtCore.QThread):
def __init__(self, parent=None):
QtCore.QThread.__init__(self, parent)
...
def run(self):
somedo
self.emit(QtCore.SIGNAL("mysignal(QString)"), "var = %s" % var)
class MyWindow(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
...
self.thread = MyThread()
self.connect(self.thread, QtCore.SIGNAL("mysignal(QString)"), self.someDef, QtCore.Qt.QueuedConnection)
...
self.thread.start()
def someDef(self, var):
print(var)
Сигналы от тредов
QtCore.SIGNAL(“clicked()”)
QtCore.SIGNAL(“started()”)
QtCore.SIGNAL(“finished()”)
Назначенные нами в (inTread)self.emit(QtCore.SIGNAL(“mysignal(QString)”), “i = %s” % i) #Для str используем
QString для int используем int
PyQT Designer
Загрузка через uic
[CreteMyNewClass =] PyQt4.uic.loadUi("MyUIfile.ui", [Class_or_salf] )
Преобразование uic в py
Для этого используем программу pyuic4
import MyFile
...
window = QtGui.QWidget()
ui = MyFile.Ui_MyForm()
ui.setupUi(window)
...
Объекты окна в ui.
Other
ресурсы