快速掌握Pyqt5的10种容器(Containers)
快速掌握Pyqt5的三种主窗口
快速掌握Pyqt5的2种弹簧
快速掌握Pyqt5的5种布局
快速弄懂Pyqt5的5种项目视图(Item View)
快速弄懂Pyqt5的4种项目部件(Item Widget)
快速掌握Pyqt5的6种按钮
快速掌握Pyqt5的20种输入控件(Input Widgets)
待续。。。
下面将提供一些简单的例子,展示PyQt5中不同种类容器的基本用法。
1. Group Box (QGroupBox)
使用QGroupBox
来分组相关的控件,如单选按钮。
from PyQt5.QtWidgets import QApplication, QWidget, QGroupBox, QRadioButton, QVBoxLayout
app = QApplication([])
window = QWidget()
groupBox = QGroupBox("Options")
radio1 = QRadioButton("Option 1")
radio2 = QRadioButton("Option 2")
vbox = QVBoxLayout()
vbox.addWidget(radio1)
vbox.addWidget(radio2)
groupBox.setLayout(vbox)
windowLayout = QVBoxLayout(window)
windowLayout.addWidget(groupBox)
window.show()
app.exec_()
2. Scroll Area (QScrollArea)
创建一个QScrollArea
,在其中放置一个大控件。
from PyQt5.QtWidgets import QApplication, QWidget, QScrollArea, QLabel, QVBoxLayout
app = QApplication([])
window = QWidget()
scrollArea = QScrollArea()
content = QLabel("A lot of content..." * 100)
scrollArea.setWidget(content)
windowLayout = QVBoxLayout(window)
windowLayout.addWidget(scrollArea)
window.show()
app.exec_()
3. Tool Box (QToolBox)
使用QToolBox
来创建带有折叠面板的容器。
from PyQt5.QtWidgets import QApplication, QWidget, QToolBox, QLabel
app = QApplication([])
window = QWidget()
toolBox = QToolBox()
toolBox.addItem(QLabel("Content of Panel 1"), "Panel 1")
toolBox.addItem(QLabel("Content of Panel 2"), "Panel 2")
windowLayout = QVBoxLayout(window)
windowLayout.addWidget(toolBox)
window.show()
app.exec_()
4. Tab Widget (QTabWidget)
创建一个QTabWidget
,其中包含多个标签页。
from PyQt5.QtWidgets import QApplication, QWidget, QTabWidget, QLabel, QVBoxLayout
app = QApplication([])
window = QWidget()
tabWidget = QTabWidget()
tabWidget.addTab(QLabel("Content of Tab 1"), "Tab 1")
tabWidget.addTab(QLabel("Content of Tab 2"), "Tab 2")
windowLayout = QVBoxLayout(window)
windowLayout.addWidget(tabWidget)
window.show()
app.exec_()
5. Stacked Widget (QStackedWidget)
使用QStackedWidget
来创建一个堆叠的控件容器。
from PyQt5.QtWidgets import QApplication, QWidget, QStackedWidget, QPushButton, QVBoxLayout
def show_next_widget():
index = (stackedWidget.currentIndex() + 1) % stackedWidget.count()
stackedWidget.setCurrentIndex(index)
app = QApplication([])
window = QWidget()
stackedWidget = QStackedWidget()
stackedWidget.addWidget(QLabel("Content of Widget 1"))
stackedWidget.addWidget(QLabel("Content of Widget 2"))
button = QPushButton("Next")
button.clicked.connect(show_next_widget)
windowLayout = QVBoxLayout(window)
windowLayout.addWidget(stackedWidget)
windowLayout.addWidget(button)
window.show()
app.exec_()
这些例子展示了如何使用PyQt5中的不同容器控件。每个容器都有其特定的用途,合理使用这些容器可以使你的GUI应用程序结构更清晰,功能更丰富。
当然,让我们继续探索PyQt5中其他的容器控件:
6. Frame (QFrame)
QFrame
可用于创建一个简单的容器,常常用于绘制边框和分隔内容。
from PyQt5.QtWidgets import QApplication, QFrame, QVBoxLayout, QLabel
app = QApplication([])
frame = QFrame()
frame.setFrameShape(QFrame.StyledPanel)
label = QLabel("Content inside a Frame")
layout = QVBoxLayout()
layout.addWidget(label)
frame.setLayout(layout)
frame.show()
app.exec_()
7. Widget (QWidget)
QWidget
是PyQt5中所有用户界面对象的基类,也可以作为一个通用的容器。
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
app = QApplication([])
widget = QWidget()
button1 = QPushButton("Button 1")
button2 = QPushButton("Button 2")
layout = QVBoxLayout()
layout.addWidget(button1)
layout.addWidget(button2)
widget.setLayout(layout)
widget.show()
app.exec_()
8. MDI Area (QMdiArea)
QMdiArea
提供了一个多文档接口(MDI),允许管理多个子窗口。
from PyQt5.QtWidgets import QApplication, QMdiArea, QMdiSubWindow, QTextEdit
app = QApplication([])
mdiArea = QMdiArea()
subWindow1 = QMdiSubWindow()
subWindow1.setWidget(QTextEdit("Subwindow 1"))
mdiArea.addSubWindow(subWindow1)
subWindow2 = QMdiSubWindow()
subWindow2.setWidget(QTextEdit("Subwindow 2"))
mdiArea.addSubWindow(subWindow2)
mdiArea.show()
app.exec_()
9. Dock Widget (QDockWidget)
QDockWidget
提供了可停靠的控件,这些控件可以被移动和重新停靠在主窗口的不同位置。
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QTextEdit
app = QApplication([])
mainWindow = QMainWindow()
dockWidget = QDockWidget("Dockable", mainWindow)
dockWidget.setWidget(QTextEdit("Docked Widget"))
mainWindow.addDockWidget(Qt.LeftDockWidgetArea, dockWidget)
mainWindow.show()
app.exec_()
10. QAxWidget
QAxWidget
是 PyQt5 中用于嵌入 ActiveX 控件的容器。ActiveX 是微软的一种软件框架,用于在不同的应用程序之间共享信息和功能。QAxWidget
使得 PyQt 应用能够集成那些仅在 Windows 系统上可用的 ActiveX 控件,例如 Microsoft Office 组件(如 Word 或 Excel)或其他第三方 ActiveX 控件。
基本使用
要使用 QAxWidget
,首先需要确保你的环境中安装了 PyQt5
和 PyQt5-tools
。QAxWidget
仅在 Windows 系统上可用。
以下是一个使用 QAxWidget
来嵌入 Internet Explorer 浏览器作为控件的简单示例:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5 import QtAxContainer
app = QApplication(sys.argv)
window = QMainWindow()
window.setWindowTitle('QAxWidget Example')
# 创建 QAxWidget
axWidget = QtAxContainer.QAxWidget(window)
axWidget.setControl("Shell.Explorer.2") # 使用 Internet Explorer 控件
# 载入一个网页
axWidget.dynamicCall('Navigate(const QString&)', 'http://www.google.com')
window.setCentralWidget(axWidget)
window.resize(800, 600)
window.show()
sys.exit(app.exec_())
注意事项
-
兼容性:
QAxWidget
仅在 Windows 上有效,因为 ActiveX 是微软的技术。 -
安全性:ActiveX 控件可能存在安全风险,因为它们具有运行时的高权限。
-
调试:集成 ActiveX 控件可能需要处理复杂的兼容性和配置问题,调试可能比较困难。
-
依赖性:使用
QAxWidget
依赖于控件的可用性,确保目标机器上安装了相应的ActiveX控件。
QAxWidget
在需要与 Windows 平台更紧密集成时非常有用,尤其是在需要使用专有的 Windows 功能或组件时。然而,它的使用应谨慎进行,以确保应用的兼容性和安全性。