Pyqt5相关文章:
快速掌握Pyqt5的三种主窗口
快速掌握Pyqt5的2种弹簧
快速掌握Pyqt5的5种布局
快速弄懂Pyqt5的5种项目视图(Item View)
快速弄懂Pyqt5的4种项目部件(Item Widget)
快速掌握Pyqt5的6种按钮
快速掌握Pyqt5的10种容器(Containers)
快速掌握Pyqt5的20种输入控件(Input Widgets)
快速掌握Pyqt5的9种显示控件
详细学习Pyqt5中的5种布局方式
详细学习Pyqt5中的6种按钮
详细学习Pyqt5中的2种弹簧
详细学习Pyqt5的5种项目视图(Item View)
详细学习Pyqt5的4种项目部件(Item Widget)
详细学习Pyqt5的20种输入控件(Input Widgets)
详细学习Pyqt5的9种显示控件
详细学习Pyqt5的10种容器(Containers)
详细学习PyQt5与数据库交互
详细学习PyQt5中的多线程
快速学习PyQt5的动画和图形效果
快速学习PyQt5的高级自定义控件
快速学会绘制Pyqt5中的所有图(上)
快速学会绘制Pyqt5中的所有图(下)
通过“待办事项列表项目”快速学习Pyqt5的一些特性
待续。。。
下面将提供一些简单的例子,展示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 功能或组件时。然而,它的使用应谨慎进行,以确保应用的兼容性和安全性。