PyQt FAQ Dialogs

Материал из Wiki.crossplatform.ru

(Различия между версиями)
Перейти к: навигация, поиск
(Удалено по требованию автора...)
 
Строка 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]]
 
-
 
-
[[Категория:Qt]]
 
-
[[Категория:Python]]
 

Текущая версия на 11:55, 7 апреля 2009