我有一個包含查看器(顯示Pixmaps的自定義QLabel)和其下的按鈕的類,以滾動可用的圖像(大小不同)。構建包含可變大小部件的QT設計器佈局
我想讓按鈕直接出現在圖像下方,這意味着每次圖像變化時都需要移動按鈕。但是,當加載更大的圖像時,它僅覆蓋按鈕。我如何在QT設計器中設置它以避免這種情況?我認爲將查看器和按鈕放到QVBoxLayout中就足夠了,但是當QLabel調整大小時,整個佈局的大小不會。我已經嘗試過使用尺寸政策一段時間了,但我一定不明白。
編輯 - 這裏是我試圖展示所需的最小代碼和UI文件。
from sprite_viewer_ui import Ui_SpriteViewer
class SpriteViewer(QWidget, Ui_SpriteViewer):
def __init__(self,parent = None):
super(SpriteViewer,self).__init__(parent)
self.setupUi(self)
self.session = Session()
self.sv = SpriteLabel(self.session,parent=self)
self.setupSession(self)
def setupSession(self):
#Update the slider and spinbox with the new range
self.spriteSlider.setRange(1,self.session.getNumSprites())
self.spritePicker.setRange(1,self.session.getNumSprites())
#Show the initial sprite
self.sv.showSprite(1)
self.spriteSlider.setValue(1)
#Make connections
self.spriteSlider.valueChanged.connect(self.session.setSprite)
self.session.spriteChanged.connect(self.sv.showSprite)
if __name__ == "__main__":
a = QApplication(sys.argv)
se = SpriteViewer()
se.show()
sys.exit(a.exec_())
所以這裏的代碼只是使用的UI建立一個基本的接口與觀衆sv
和紡紗器和滑塊顯示使用哪個精靈。該ui文件是:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SpriteViewer</class>
<widget class="QWidget" name="SpriteViewer">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>658</width>
<height>420</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<item>
<widget class="QLabel" name="sv">
<property name="minimumSize">
<size>
<width>640</width>
<height>360</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QSlider" name="spriteSlider">
<property name="maximum">
<number>0</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
<property name="tickInterval">
<number>30</number>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spritePicker">
<property name="maximum">
<number>0</number>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>spriteSlider</sender>
<signal>valueChanged(int)</signal>
<receiver>spritePicker</receiver>
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel">
<x>562</x>
<y>361</y>
</hint>
<hint type="destinationlabel">
<x>587</x>
<y>362</y>
</hint>
</hints>
</connection>
<connection>
<sender>spritePicker</sender>
<signal>valueChanged(int)</signal>
<receiver>spriteSlider</receiver>
<slot>setValue(int)</slot>
<hints>
<hint type="sourcelabel">
<x>594</x>
<y>361</y>
</hint>
<hint type="destinationlabel">
<x>540</x>
<y>363</y>
</hint>
</hints>
</connection>
</connections>
</ui>
我意識到這是一個惡夢閱讀。但基本上它是一個QHBoxLayout中的spinbox和滑塊,以及一個QLabel(我後來將其設置爲我的SpriteViewer類,它是QLabel的子類。這是一個問題 - 每個Sprite都有不同的大小,我希望SpriteViewer根據。SpriteLabel的大小
如果沒有看到.ui文件(加上任何可能直接相關的代碼),這幾乎是不可能的。 – ekhumoro
謝謝,我會嘗試儘快上傳最小案例。我希望有一些簡單的答案,例如在內部小部件的大小發生變化時調用layout.update()類型的東西。 –