diff options
Diffstat (limited to 'examples/widgets/gallery/widgetgallery.py')
-rw-r--r-- | examples/widgets/gallery/widgetgallery.py | 429 |
1 files changed, 0 insertions, 429 deletions
diff --git a/examples/widgets/gallery/widgetgallery.py b/examples/widgets/gallery/widgetgallery.py deleted file mode 100644 index a06ac2e20..000000000 --- a/examples/widgets/gallery/widgetgallery.py +++ /dev/null @@ -1,429 +0,0 @@ -############################################################################# -## -## Copyright (C) 2020 The Qt Company Ltd. -## Contact: http://www.qt.io/licensing/ -## -## This file is part of the Qt for Python examples of the Qt Toolkit. -## -## $QT_BEGIN_LICENSE:BSD$ -## You may use this file under the terms of the BSD license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of The Qt Company Ltd nor the names of its -## contributors may be used to endorse or promote products derived -## from this software without specific prior written permission. -## -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -## $QT_END_LICENSE$ -## -############################################################################# - -import sys - -from PySide2.QtWidgets import * -from PySide2.QtGui import (QCursor, QDesktopServices, QGuiApplication, QIcon, - QKeySequence, QStandardItem, QStandardItemModel, - QScreen, QWindow) -from PySide2.QtCore import (QDateTime, QDir, QLibraryInfo, QMetaObject, - QSysInfo, QTextStream, QTimer, Qt, qVersion) - - -POEM = """Twinkle, twinkle, little star, -How I wonder what you are. -Up above the world so high, -Like a diamond in the sky. -Twinkle, twinkle, little star, -How I wonder what you arenot""" - -DIR_OPEN_ICON = ":/qt-project.org/styles/commonstyle/images/diropen-128.png" - -COMPUTER_ICON = ":/qt-project.org/styles/commonstyle/images/computer-32.png" - -SYSTEMINFO = """<html><head/><body> -<h3>Python</h3><p>{}</p> -<h3>Qt Build</h3><p>{}</p> -<h3>Operating System</h3><p>{}</p> -<h3>Screens</h3> -{} -</body></html>""" - - -def class_name(o): - return o.metaObject().className() - - -def help_url(page): - """Build a Qt help URL from the page name""" - major_version = qVersion().split('.')[0] - return "https://doc.qt.io/qt-{}/{}.html".format(major_version, page) - - -def launch_help(widget): - """Launch a widget's help page""" - url = help_url(class_name(widget).lower()) - QDesktopServices.openUrl(url) - - -def launch_module_help(): - QDesktopServices.openUrl(help_url("qtwidgets-index")) - - -def init_widget(w, name): - """Init a widget for the gallery, give it a tooltip showing the - class name""" - w.setObjectName(name) - w.setToolTip(class_name(w)) - - -def style_names(): - """Return a list of styles, default platform style first""" - default_style_name = QApplication.style().objectName().lower() - result = [] - for style in QStyleFactory.keys(): - if style.lower() == default_style_name: - result.insert(0, style) - else: - result.append(style) - return result - - -def embed_into_hbox_layout(w, margin=5): - """Embed a widget into a layout to give it a frame""" - result = QWidget() - layout = QHBoxLayout(result) - layout.setContentsMargins(margin, margin, margin, margin) - layout.addWidget(w) - return result - - -def format_geometry(rect): - """Format a geometry as a X11 geometry specification""" - return "{}x{}{:+d}{:+d}".format(rect.width(), rect.height(), - rect.x(), rect.y()) - - -def screen_info(widget): - """Format information on the screens""" - policy = QGuiApplication.highDpiScaleFactorRoundingPolicy() - policy_string = str(policy).split('.')[-1] - result = "<p>High DPI scale factor rounding policy: {}</p><ol>".format(policy_string) - for screen in QGuiApplication.screens(): - current = screen == widget.screen() - result += "<li>" - if current: - result += "<i>" - result += '"{}" {} {}DPI, DPR={}'.format(screen.name(), - format_geometry(screen.geometry()), - int(screen.logicalDotsPerInchX()), - screen.devicePixelRatio()) - if current: - result += "</i>" - result += "</li>" - result += "</ol>" - return result - - -class WidgetGallery(QDialog): - """Dialog displaying a gallery of Qt Widgets""" - - def __init__(self): - super(WidgetGallery, self).__init__() - - self._progress_bar = self.create_progress_bar() - - self._style_combobox = QComboBox() - init_widget(self._style_combobox, "styleComboBox") - self._style_combobox.addItems(style_names()) - - style_label = QLabel("Style:") - init_widget(style_label, "style_label") - style_label.setBuddy(self._style_combobox) - - help_label = QLabel("Press F1 over a widget to see Documentation") - init_widget(help_label, "help_label") - - disable_widgets_checkbox = QCheckBox("Disable widgets") - init_widget(disable_widgets_checkbox, "disable_widgets_checkbox") - - buttons_groupbox = self.create_buttons_groupbox() - itemview_tabwidget = self.create_itemview_tabwidget() - simple_input_widgets_groupbox = self.create_simple_inputwidgets_groupbox() - text_toolbox = self.create_text_toolbox() - - self._style_combobox.textActivated.connect(self.change_style) - disable_widgets_checkbox.toggled.connect(buttons_groupbox.setDisabled) - disable_widgets_checkbox.toggled.connect(text_toolbox.setDisabled) - disable_widgets_checkbox.toggled.connect(itemview_tabwidget.setDisabled) - disable_widgets_checkbox.toggled.connect(simple_input_widgets_groupbox.setDisabled) - - help_shortcut = QShortcut(self) - help_shortcut.setKey(QKeySequence.HelpContents) - help_shortcut.activated.connect(self.help_on_current_widget) - - top_layout = QHBoxLayout() - top_layout.addWidget(style_label) - top_layout.addWidget(self._style_combobox) - top_layout.addStretch(1) - top_layout.addWidget(help_label) - top_layout.addStretch(1) - top_layout.addWidget(disable_widgets_checkbox) - - dialog_buttonbox = QDialogButtonBox(QDialogButtonBox.Help | - QDialogButtonBox.Close) - init_widget(dialog_buttonbox, "dialogButtonBox") - dialog_buttonbox.helpRequested.connect(launch_module_help) - dialog_buttonbox.rejected.connect(self.reject) - - main_layout = QGridLayout(self) - main_layout.addLayout(top_layout, 0, 0, 1, 2) - main_layout.addWidget(buttons_groupbox, 1, 0) - main_layout.addWidget(simple_input_widgets_groupbox, 1, 1) - main_layout.addWidget(itemview_tabwidget, 2, 0) - main_layout.addWidget(text_toolbox, 2, 1) - main_layout.addWidget(self._progress_bar, 3, 0, 1, 2) - main_layout.addWidget(dialog_buttonbox, 4, 0, 1, 2) - - self.setWindowTitle("Widget Gallery Qt {}".format(qVersion())) - - def setVisible(self, visible): - super(WidgetGallery, self).setVisible(visible) - if visible: - self.windowHandle().screenChanged.connect(self.update_systeminfo) - self.update_systeminfo() - - def change_style(self, style_name): - QApplication.setStyle(QStyleFactory.create(style_name)) - - def advance_progressbar(self): - cur_val = self._progress_bar.value() - max_val = self._progress_bar.maximum() - self._progress_bar.setValue(cur_val + (max_val - cur_val) / 100) - - def create_buttons_groupbox(self): - result = QGroupBox("Buttons") - init_widget(result, "buttons_groupbox") - - default_pushbutton = QPushButton("Default Push Button") - init_widget(default_pushbutton, "default_pushbutton") - default_pushbutton.setDefault(True) - - toggle_pushbutton = QPushButton("Toggle Push Button") - init_widget(toggle_pushbutton, "toggle_pushbutton") - toggle_pushbutton.setCheckable(True) - toggle_pushbutton.setChecked(True) - - flat_pushbutton = QPushButton("Flat Push Button") - init_widget(flat_pushbutton, "flat_pushbutton") - flat_pushbutton.setFlat(True) - - toolbutton = QToolButton() - init_widget(toolbutton, "toolButton") - toolbutton.setText("Tool Button") - - menu_toolbutton = QToolButton() - init_widget(menu_toolbutton, "menuButton") - menu_toolbutton.setText("Menu Button") - tool_menu = QMenu(menu_toolbutton) - menu_toolbutton.setPopupMode(QToolButton.InstantPopup) - tool_menu.addAction("Option") - tool_menu.addSeparator() - action = tool_menu.addAction("Checkable Option") - action.setCheckable(True) - menu_toolbutton.setMenu(tool_menu) - tool_layout = QHBoxLayout() - tool_layout.addWidget(toolbutton) - tool_layout.addWidget(menu_toolbutton) - - commandlinkbutton = QCommandLinkButton("Command Link Button") - init_widget(commandlinkbutton, "commandLinkButton") - commandlinkbutton.setDescription("Description") - - button_layout = QVBoxLayout() - button_layout.addWidget(default_pushbutton) - button_layout.addWidget(toggle_pushbutton) - button_layout.addWidget(flat_pushbutton) - button_layout.addLayout(tool_layout) - button_layout.addWidget(commandlinkbutton) - button_layout.addStretch(1) - - radiobutton_1 = QRadioButton("Radio button 1") - init_widget(radiobutton_1, "radioButton1") - radiobutton_2 = QRadioButton("Radio button 2") - init_widget(radiobutton_2, "radioButton2") - radiobutton_3 = QRadioButton("Radio button 3") - init_widget(radiobutton_3, "radioButton3") - radiobutton_1.setChecked(True) - - checkbox = QCheckBox("Tri-state check box") - init_widget(checkbox, "checkBox") - checkbox.setTristate(True) - checkbox.setCheckState(Qt.PartiallyChecked) - - checkableLayout = QVBoxLayout() - checkableLayout.addWidget(radiobutton_1) - checkableLayout.addWidget(radiobutton_2) - checkableLayout.addWidget(radiobutton_3) - checkableLayout.addWidget(checkbox) - checkableLayout.addStretch(1) - - main_layout = QHBoxLayout(result) - main_layout.addLayout(button_layout) - main_layout.addLayout(checkableLayout) - main_layout.addStretch() - return result - - def create_text_toolbox(self): - result = QToolBox() - init_widget(result, "toolBox") - - # Create centered/italic HTML rich text - rich_text = "<html><head/><body><i>" - for line in POEM.split('\n'): - rich_text += "<center>" + line + "</center>" - rich_text += "</i></body></html>" - - text_edit = QTextEdit(rich_text) - init_widget(text_edit, "textEdit") - plain_textedit = QPlainTextEdit(POEM) - init_widget(plain_textedit, "plainTextEdit") - - self._systeminfo_textbrowser = QTextBrowser() - init_widget(self._systeminfo_textbrowser, "systemInfoTextBrowser") - - result.addItem(embed_into_hbox_layout(text_edit), "Text Edit") - result.addItem(embed_into_hbox_layout(plain_textedit), - "Plain Text Edit") - result.addItem(embed_into_hbox_layout(self._systeminfo_textbrowser), - "Text Browser") - return result - - def create_itemview_tabwidget(self): - result = QTabWidget() - init_widget(result, "bottomLeftTabWidget") - result.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Ignored) - - tree_view = QTreeView() - init_widget(tree_view, "treeView") - filesystem_model = QFileSystemModel(tree_view) - filesystem_model.setRootPath(QDir.rootPath()) - tree_view.setModel(filesystem_model) - - table_widget = QTableWidget() - init_widget(table_widget, "tableWidget") - table_widget.setRowCount(10) - table_widget.setColumnCount(10) - - list_model = QStandardItemModel(0, 1, result) - - list_model.appendRow(QStandardItem(QIcon(DIR_OPEN_ICON), "Directory")) - list_model.appendRow(QStandardItem(QIcon(COMPUTER_ICON), "Computer")) - - list_view = QListView() - init_widget(list_view, "listView") - list_view.setModel(list_model) - - icon_mode_listview = QListView() - init_widget(icon_mode_listview, "iconModeListView") - - icon_mode_listview.setViewMode(QListView.IconMode) - icon_mode_listview.setModel(list_model) - - result.addTab(embed_into_hbox_layout(tree_view), "Tree View") - result.addTab(embed_into_hbox_layout(table_widget), "Table") - result.addTab(embed_into_hbox_layout(list_view), "List") - result.addTab(embed_into_hbox_layout(icon_mode_listview), - "Icon Mode List") - return result - - def create_simple_inputwidgets_groupbox(self): - result = QGroupBox("Simple Input Widgets") - init_widget(result, "bottomRightGroupBox") - result.setCheckable(True) - result.setChecked(True) - - lineedit = QLineEdit("s3cRe7") - init_widget(lineedit, "lineEdit") - lineedit.setClearButtonEnabled(True) - lineedit.setEchoMode(QLineEdit.Password) - - spin_box = QSpinBox() - init_widget(spin_box, "spinBox") - spin_box.setValue(50) - - date_timeedit = QDateTimeEdit() - init_widget(date_timeedit, "dateTimeEdit") - date_timeedit.setDateTime(QDateTime.currentDateTime()) - - slider = QSlider() - init_widget(slider, "slider") - slider.setOrientation(Qt.Horizontal) - slider.setValue(40) - - scrollbar = QScrollBar() - init_widget(scrollbar, "scrollBar") - scrollbar.setOrientation(Qt.Horizontal) - scrollbar.setValue(60) - - dial = QDial() - init_widget(dial, "dial") - dial.setValue(30) - dial.setNotchesVisible(True) - - layout = QGridLayout(result) - layout.addWidget(lineedit, 0, 0, 1, 2) - layout.addWidget(spin_box, 1, 0, 1, 2) - layout.addWidget(date_timeedit, 2, 0, 1, 2) - layout.addWidget(slider, 3, 0) - layout.addWidget(scrollbar, 4, 0) - layout.addWidget(dial, 3, 1, 2, 1) - layout.setRowStretch(5, 1) - return result - - def create_progress_bar(self): - result = QProgressBar() - init_widget(result, "progressBar") - result.setRange(0, 10000) - result.setValue(0) - - timer = QTimer(self) - timer.timeout.connect(self.advance_progressbar) - timer.start(1000) - return result - - def update_systeminfo(self): - """Display system information""" - system_info = SYSTEMINFO.format(sys.version, - QLibraryInfo.build(), - QSysInfo.prettyProductName(), - screen_info(self)) - self._systeminfo_textbrowser.setHtml(system_info) - - def help_on_current_widget(self): - """Display help on widget under mouse""" - w = QApplication.widgetAt(QCursor.pos(self.screen())) - while w: # Skip over internal widgets - name = w.objectName() - if name and not name.startswith("qt_"): - launch_help(w) - break - w = w.parentWidget() |