1
我們正在編寫一個程序來顯示來自顯微鏡的視頻。視頻的大小是2208 * 1648。這比可用的屏幕尺寸大得多。所以我使用QScrollArea來顯示它。在PyQt的QScrollArea中獲取視口的大小
self.scrollArea = QScrollArea(self)
self.scrollArea.setBackgroundRole(QPalette.Dark)
self.scrollArea.setWidget(self.imageLabel)
self.scrollArea.setWidgetResizable(True)
這將視頻縮放到視口的大小。所以最初,視頻完全顯示在沒有滾動條的Scrollarea的視口中。現在必須可以放大視頻的特定部分。因此可以輸入縮放因子。當這樣做執行以下代碼:
def scaleImage(self, factor):
self.scrollArea.setWidgetResizable(False)
self.imageLabel.resize(factor * self.imageLabel.pixmap().size())
self.adjustScrollBar(self.scrollArea.horizontalScrollBar(), factor)
self.adjustScrollBar(self.scrollArea.verticalScrollBar(), factor)
當顯示實際的視頻,圖像是使用下面的函數
def set_image(self, pixmap):
self.imageLabel.set_image(pixmap, self.current_width, self.current_height)
self.imageLabel.resize(self.current_zoomfactor * self.imageLabel.pixmap().size())
此作品發送到標籤。但有幾個問題: 1. setWidgetResizable不尊重寬高比 2.當用戶縮小時,最終圖片變得小於視口,這不是我想要的。 3.我嘗試使用
sizehint = self.scrollArea.viewportSizeHint()
然後我得到一個尺寸看起來或多或少正確獲取視野的大小,但是當我調整窗口大小的結果不會改變。
在此先感謝
我會自己回答這個問題.... –
它證明大小已被正確調整,但我被初始值弄糊塗了,因爲這個小部件並沒有完全構建,所以這些初始值是不正確的。 –