PyQt4 - Діалогові вікна

У PyQt4 є два види діалогів: зумовлені та користувацькі.

Зумовлені діалоги

QInputDialog

QInputDialog є простим діалогом для отримання єдиного значення від користувача. Значення може бути рядком, числом або пунктом у списку. #!/usr/bin/python # inputdialog.py

import sys від PyQt4 import QtGui від PyQt4 import QtCore

class InputDialog (QtGui. QWidget): def __init__ (self, parent = None): QtGui. QWidget. __init__ (self, parent) self. setGeometry (300, 300, 350, 80) self. setWindowTitle ( 'InputDialog') self. button = QtGui. QPushButton ('Dialog', self) self. button. setFocusPolicy (QtCore. Qt. NoFocus) self. button. move (20, 20) self. connect (self. button, QtCore. SIGNAL ('clicked()'), self. showDialog) self. setFocus () self. label = QtGui. QLineEdit (self) self. label . move ( 130 , 22 )

def showDialog (self): text, ok = QtGui. QInputDialog. getText (self, 'Input Dialog', 'Enter your name:') if ok: self. label . setText ( unicode ( text ) )

app = QtGui. QApplication (sys. argv) icon = InputDialog () icon. show ( ) app. exec_ ( )

На формі розміщуються кнопка та рядок введення. При натисканні на кнопку відкривається діалог введення для отримання текстового значення. Введений текст буде відображено у рядку введення.

text, ok = QtGui. QInputDialog. getText ( self , 'Input Dialog' , 'Enter your name:' )

Цей рядок відображає діалоговий вхід. Перший рядок це заголовок діалогу, другий текст повідомлення. Діалог повертає введений текст та логічне значення. Якщо ми натиснемо кнопку OK, логічне значення буде true, інакше false.

QColorDialog

QColorDialog надає діалогове вікно для вибору кольорів. #!/usr/bin/python # colordialog.py

імпорт sys з PyQt4 імпорт QtGui з PyQt4 імпорт QtCore

class ColorDialog ( QtGui. QWidget ): def __init__ ( self , parent= None ) : QtGui. QWidget . __init__ ( self , parent ) color = QtGui. QColor ( 0 , 0 , 0 ) self . setGeometry ( 300 , 300 , 250 , 180 ) self . setWindowTitle ( 'ColorDialog' ) self . кнопка = QtGui. QPushButton ( 'Dialog' , self ) self . кнопка . setFocusPolicy ( QtCore. Qt . NoFocus ) self . кнопка . переміщення ( 20 , 20 ) self . connect ( self . button , QtCore. SIGNAL ( 'clicked()' ) , self . showDialog ) self . setFocus ( ) self . віджет = QtGui. QWidget ( self ) self . віджет . setStyleSheet ( "QWidget < background-color: %s >" % color. name ( ) ) self . віджет . setGeometry (130, 22, 100, 100)

def showDialog ( self ): колір = QtGui. QColorDialog. getColor ( ) self . віджет . setStyleSheet ( "QWidget < background-color: %s >" % color. name ( ) )

програма = QtGui. QApplication ( sys. argv ) cd = ColorDialog ( ) cd . показати ( ) програму. exec_ ( )

В цьому прикладі знаходяться кнопки (QPushButton) і QWidget. Фон віджета покритий чорним кольором. За допомогою QColorDialog ми можемо змінити його фон на вказаний колір.

колір = QtGui. QColorDialog. getColor ( )

Ця строка відкриває QColorDialog.

себе . віджет . setStyleSheet ( "QWidget < background-color: %s >" % color. name ( ) )

Ми змінюємо колір фону за допомогою стилю таблиці.

QFontDialog

QFontDialog надає діалогове вікно для вибору шрифту. #!/usr/bin/python # fontdialog.py

імпорт sys зPyQt4 імпортує QtGui з PyQt4 імпортує QtCore

class FontDialog ( QtGui. QWidget ): def __init__ ( self , parent= None ) : QtGui. QWidget . __init__ ( self , parent ) hbox = QtGui. QHBoxLayout ( ) self . setGeometry ( 300 , 300 , 250 , 110 ) self . setWindowTitle ( 'FontDialog' ) button = QtGui. QPushButton ( 'Dialog' , self ) кнопка. setFocusPolicy ( QtCore. Qt . NoFocus ) кнопка. перемістити ( 20 , 20 ) hbox. addWidget ( кнопка ) self . підключення (кнопка, QtCore. SIGNAL ('clicked()') , self . showDialog ) self . мітка = QtGui. QLabel ( 'Важливо лише знання' , self ) self . етикетка. перемістити ( 130 , 20 ) hbox. addWidget ( self . label , 1 ) self . setLayout (hbox)

def showDialog ( self ): шрифт, добре = QtGui. QFontDialog. getFont ( ) якщо добре: self . етикетка. setFont (шрифт)

програма = QtGui. QApplication ( sys. argv ) cd = FontDialog ( ) cd . показати ( ) програму. exec_ ( )

У нашому прикладі ми розташували у формі QPushButton і QLabel. З допомогою QFontDialog ми змінили шрифт QLabel.

hbox. addWidget (власна мітка, 1)

Ми зробили QLabel зі зміненим розміром. Це необхідно, оскільки за допомогою різних шрифтів текст може бути більшим, а надпис може стати не повністю видимим.

шрифт, добре = QtGui. QFontDialog. getFont ( )

Тут ми відкриваємо діалогове вікно вибору шрифтів.

якщо добре: self . етикетка. setFont (шрифт)

Якщо ми щёлкнем по кнопці OK, шрифт QLabel зміниться.

QFileDialog

QFileDialog — це діалогове вікно, яке дозволяє користувачам вибирати файли чи папки. Файли можуть бути вказані як для збереження так і для відкриття. #!/usr/bin/python # openfiledialog.py

імпорт sys з PyQt4 імпорт QtGui з PyQt4 імпортQtCore

class OpenFile ( QtGui. QMainWindow ): def __init__ ( self , parent= None ) : QtGui. QMainWindow . __init__ (self, parent) self. setGeometry ( 300 , 300 , 350 , 300 ) self . setWindowTitle ( 'OpenFile' ) self . textEdit = QtGui. QTextEdit ( ) self . setCentralWidget ( self . textEdit ) self . statusBar ( ) self . setFocus ( ) вихід = QtGui. QAction ( QtGui. QIcon ( 'open.png' ) , 'Open' , self ) вихід. setShortcut ( 'Ctrl+O' ) вихід. setStatusTip ( 'Відкрити новий файл' ) self . підключення (вихід, QtCore. SIGNAL ('triggered()') , self . showDialog )

menubar = self . menuBar ( ) file = menubar. addMenu ( '&File' ) file . addAction (вихід)

def showDialog ( self ): ім'я файлу = QtGui. QFileDialog . getOpenFileName ( self , 'Відкрити файл' , '/home' ) file = open ( filename ) data = file . читати ( ) self . textEdit . setText (дані)

програма = QtGui. QApplication ( sys. argv ) cd = OpenFile ( ) cd . показати ( ) програму. exec_ ( )

У цьому прикладі у формі розташованої панелі меню, QTextEdit і рядка статусу. Пункт меню дозволяє відкрити діалогове вікно вибору файлів. Содержимое вибраного файлу завантажується в QTextEdit. Строка статусу показана виключно в цілях краси:)

клас OpenFile ( QtGui. QMainWindow ): . сама . textEdit = QtGui. QTextEdit ( ) self . setCentralWidget ( self . textEdit )

Цей приклад засновано на QMainWindow, оскільки ми заповнили форму центру QTextEdit. Це легко зробити за допомогою QMainWindow без звернення до розкладок (макетів).

ім'я файлу = QtGui. QFileDialog . getOpenFileName ( self , 'Відкрити файл' , '/home' )

Ми відкриваємо діалогове вікно QFileDialog. Другий параметр у методі getOpenFileName це заголовок вікна. Третий вказуєПочатковий каталог. Фільтр файлів за замовчуванням встановлено All Files (*).

file = open (filename) data = file. read () self. textEdit. setText (data)

Вміст вибраного файлу прочитується та заповнює QTextEdit. .

А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»