上节聊了聊滚动区域控件QScrollArea(),用来创建一个可滚动的区域,在滚动区域添加一个大的控件,用拖动滚动条来预览全部内容,效果如下: 我们以前创建类时都是继承自QWidget()这个控件,因为他是所有可视化控件的基类,一般也都是继承自QWidget(); 但是如果你的窗口中所有的内容全都在滚动区域QScrollArea()内时,其实可以直接继承自QScrollArea()这个类了,这样你的主窗口就相当于一个滚动区域,你只需要把你的所有控件通过 setWidget(控件)添加到主窗口中就行了;需要注意的是,如果你的窗口中既有一般的控件,又有滚动区域控件,这就还需要继承自QWidget(),在QWidget()空白窗口上放置一般的非滚动显示控件 和 滚动显示控件。 比如上节只是显示一个图片的滚动区域窗口,完全可以继承自QScrollArea()控件。from PySide6.QtGui import QPixmap # QPixmap是用来加载图片的一个类,他不是一个控件from PySide6.QtWidgets import QApplication, QLabel, QScrollArea
class Win(QScrollArea): def __init__(self): # 初始化父类QScrollArea super().__init__() # 设置窗口的标题 self.setWindowTitle("图片预览")
def setup_01(self): # 创建一个标签来显示图片 label = QLabel() # 加载一个图片对象 pixmap = QPixmap("./1.jpg") label.setPixmap(pixmap) # 把标签添加到滚动区域 # 这时候滚动区域就是self了 self.setWidget(label)
if __name__ == "__main__": import sys # 创建一个app实例 app = QApplication(sys.argv) # 实例化上面的类 Win() win = Win() # 显示上面实例化后的窗口对象 win.show() # 运行程序 sys.exit(app.exec())
效果与上面继承QWidget()的效果唯一的区别是,图片周边没有了白色的边距,QWidget()默认四周是有一定白边的;QScrollArea( )直接贴着窗口显示,没有白边距了。这个边距可以通过设置QLabel()来设置的。 通过上面的例子,我们发现,创建类时,继承自那个父类,是可以根据需要来选择的,下节咱们就用直接继承QScrollArea()来做个案例。