|
|
(1 промежуточная версия не показана) |
Строка 1: |
Строка 1: |
- | Dialog windows or dialogs are an indispensable part of most modern GUI applications. A dialog is defined as a conversation between two or more persons. In a computer application a dialog is a window which is used to "talk" to the application. A dialog is used to input data, modify data, change the application settings etc. Dialogs are important means of communication between a user and a computer program.
| |
- | There are essentially two types of dialogs. Predefined dialogs and custom dialogs.
| |
| | | |
- | =Predefined Dialogs=
| |
- | == QInputDialog ==
| |
- | The <i>QInputDialog</i> provides a simple convenience dialog to get a single value from the user.
| |
- | The input value can be a string, a number or an item from a list.
| |
- | <source lang="python">
| |
- | #!/usr/bin/python
| |
- |
| |
- | # inputdialog.py
| |
- |
| |
- | import sys
| |
- | from PyQt4 import QtGui
| |
- | from 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_()
| |
- | </source>
| |
- |
| |
- | The example has a button and a line edit widget. The button shows the input dialog for getting text values.
| |
- | The entered text will be displayed in the line edit widget.
| |
- |
| |
- | <source lang="python">
| |
- | text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog', 'Enter your name:')
| |
- | </source>
| |
- |
| |
- | This line displays the input dialog. The first string is a dialog title, the second one is a message within the dialog.
| |
- | The dialog returns the entered text and a boolean value. If we clicked ok button, the boolean value is true, otherwise false.
| |
- |
| |
- | [[image: pyqt_faq_inputdialog.jpg | center]]
| |
- |
| |
- | == QColorDialog ==
| |
- | The <i>QColorDialog</i> provides a dialog widget for specifying colors.
| |
- | <source lang="python">
| |
- | #!/usr/bin/python
| |
- |
| |
- | # colordialog.py
| |
- |
| |
- | import sys
| |
- | from PyQt4 import QtGui
| |
- | from PyQt4 import 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.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.widget = QtGui.QWidget(self)
| |
- | self.widget.setStyleSheet("QWidget { background-color: %s }"
| |
- | % color.name())
| |
- | self.widget.setGeometry(130, 22, 100, 100)
| |
- |
| |
- |
| |
- | def showDialog(self):
| |
- | color = QtGui.QColorDialog.getColor()
| |
- |
| |
- | self.widget.setStyleSheet("QWidget { background-color: %s }"
| |
- | % color.name())
| |
- |
| |
- | app = QtGui.QApplication(sys.argv)
| |
- | cd = ColorDialog()
| |
- | cd.show()
| |
- | app.exec_()
| |
- | </source>
| |
- |
| |
- | The application example shows a push button and a <i>QWidget</i>. The widget background is set to black color.
| |
- | Using the <i>QColorDialog</i>, we can change it's background.
| |
- |
| |
- | <source lang="python">
| |
- | color = QtGui.QColorDialog.getColor()
| |
- | </source>
| |
- |
| |
- | This line will pop up the <i>QColorDialog</i>.
| |
- |
| |
- | <source lang="python">
| |
- | self.widget.setStyleSheet("QWidget { background-color: %s }"
| |
- | % color.name())
| |
- | </source>
| |
- |
| |
- | We change the background color using stylesheets.
| |
- |
| |
- | [[image: pyqt_faq_colordialog.jpg | center]]
| |
- |
| |
- | == QFontDialog ==
| |
- | The <i>QFontDialog</i> is a dialog widget for selecting font.
| |
- | <source lang="python">
| |
- | #!/usr/bin/python
| |
- |
| |
- | # fontdialog.py
| |
- |
| |
- | import sys
| |
- | from PyQt4 import QtGui
| |
- | from PyQt4 import 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)
| |
- | button.setFocusPolicy(QtCore.Qt.NoFocus)
| |
- | button.move(20, 20)
| |
- |
| |
- | hbox.addWidget(button)
| |
- |
| |
- | self.connect(button, QtCore.SIGNAL('clicked()'), self.showDialog)
| |
- |
| |
- | self.label = QtGui.QLabel('Knowledge only matters', self)
| |
- | self.label.move(130, 20)
| |
- |
| |
- | hbox.addWidget(self.label, 1)
| |
- | self.setLayout(hbox)
| |
- |
| |
- |
| |
- | def showDialog(self):
| |
- | font, ok = QtGui.QFontDialog.getFont()
| |
- | if ok:
| |
- | self.label.setFont(font)
| |
- |
| |
- |
| |
- | app = QtGui.QApplication(sys.argv)
| |
- | cd = FontDialog()
| |
- | cd.show()
| |
- | app.exec_()
| |
- | </source>
| |
- |
| |
- | In our example, we have a button and a label. With <i>QFontDialog</i>, we change the font of the label.
| |
- |
| |
- | <source lang="python">
| |
- | hbox.addWidget(self.label, 1)
| |
- | </source>
| |
- |
| |
- | We make the label resizable. It is necessary, because when we select a different font, the text may become larger.
| |
- | Otherwise the label might not be fully visible.
| |
- |
| |
- | <source lang="python">
| |
- | font, ok = QtGui.QFontDialog.getFont()
| |
- | </source>
| |
- |
| |
- | Here we pop up the font dialog.
| |
- |
| |
- | <source lang="python">
| |
- | if ok:
| |
- | self.label.setFont(font)
| |
- | </source>
| |
- |
| |
- | If we clicked ok, the font of the label was changed.
| |
- |
| |
- | [[image: pyqt_faq_fontdialog.jpg | center]]
| |
- |
| |
- | == QFileDialog ==
| |
- | The <i>QFileDialog</i> is a dialog that allows users to select files or directories. The files can be selected for both opening a saving.
| |
- | <source lang="python">
| |
- | #!/usr/bin/python
| |
- |
| |
- | # openfiledialog.py
| |
- |
| |
- | import sys
| |
- | from PyQt4 import QtGui
| |
- | from PyQt4 import 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()
| |
- |
| |
- | exit = QtGui.QAction(QtGui.QIcon('open.png'), 'Open', self)
| |
- | exit.setShortcut('Ctrl+O')
| |
- | exit.setStatusTip('Open new File')
| |
- | self.connect(exit, QtCore.SIGNAL('triggered()'), self.showDialog)
| |
- |
| |
- | menubar = self.menuBar()
| |
- | file = menubar.addMenu('&File')
| |
- | file.addAction(exit)
| |
- |
| |
- | def showDialog(self):
| |
- | filename = QtGui.QFileDialog.getOpenFileName(self, 'Open file',
| |
- | '/home')
| |
- | file=open(filename)
| |
- | data = file.read()
| |
- | self.textEdit.setText(data)
| |
- |
| |
- | app = QtGui.QApplication(sys.argv)
| |
- | cd = OpenFile()
| |
- | cd.show()
| |
- | app.exec_()
| |
- | </source>
| |
- |
| |
- | The example shows a menubar, centrally set text edit widget and a statusbar. The statusbar is shown only for desing purposes.
| |
- | The the menu item shows the <i>QFileDialog</i> which is used to select a file. The contents of the file are loaded into the text edit widget.
| |
- |
| |
- | <source lang="python">
| |
- |
| |
- | class OpenFile(QtGui.QMainWindow):
| |
- | ...
| |
- | self.textEdit = QtGui.QTextEdit()
| |
- | self.setCentralWidget(self.textEdit)
| |
- | </source>
| |
- |
| |
- | The example is based on the <i>QMainWindow</i> widget, because we centrally set the text edit widget.
| |
- | This is easily done with the <i>QMainWindow</i> widget, without resorting to layouts.
| |
- |
| |
- | <source lang="python">
| |
- | filename = QtGui.QFileDialog.getOpenFileName(self, 'Open file',
| |
- | '/home')
| |
- | </source>
| |
- |
| |
- | We pop up the <i>QFileDialog</i>. The first string in the getOpenFileName method is the caption. The second string specifies the dialog working directory. By default, the file filter is set to All files (*).
| |
- |
| |
- | <source lang="python">
| |
- | file=open(filename)
| |
- | data = file.read()
| |
- | self.textEdit.setText(data)
| |
- | </source>
| |
- |
| |
- | The selected file name is read and the contents of the file are set to the text edit widget.
| |
- |
| |
- | [[image: pyqt_faq_filedialog.jpg | center]]
| |