【发布时间】:2017-10-16 00:34:34
【问题描述】:
我正在尝试使 QWidget 贴在屏幕右边框上,并在左侧显示/隐藏另一个 QWidget。我们的目标是在最终获得类似的东西:
----------------------------------
| Rest of screen | |
| | Dock |
| | QWdiget |
| | |
| | button |
| | |
| | |
----------------------------------
点击按钮后:
----------------------------------
| Panel QWidget | |
| | Dock |
| | QWdiget |
| | |
| | button |
| | |
| | |
----------------------------------
到目前为止一切都很好,但是只要我按下按钮,QWidget“停靠”就会移动并且不想停留在屏幕边缘。如果我试图把它放回正确的地方,它就不是在正确的地方,给我这样的东西:
----------------------------------
| Rest of screen | |
| when Panel Qwidget | ---------|
| is hidden | | Dock |
| | |QWdiget |
| | | |
| | | button |
| | | |
| | | |
----------------------------------
有没有办法实现我想要的?保持 QWidget Dock 正确而不移动并仅使用按钮显示 QWidget 面板以占据屏幕的其余部分?我试图“玩”QSizePolicy,但没有成功。
这是我的示例代码:
from PyQt5.Qt import QWidget, QApplication, QLabel, QHBoxLayout, QPushButton, QSizePolicy
class DockWidget(QWidget):
def __init__(self):
super(DockWidget, self).__init__()
self.button = QPushButton('Panel')
def initialize(self):
"""
:return:
"""
layout = QHBoxLayout()
self.setLayout(layout)
label = QLabel('Dock')
layout.addWidget(label)
layout.addWidget(self.button)
class PanelWidget(QWidget):
def initialize(self):
"""
:return:
"""
layout = QHBoxLayout()
self.setLayout(layout)
label = QLabel('Panel')
layout.addWidget(label)
# self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
class MainWidget(QWidget):
def __init__(self):
super(MainWidget, self).__init__()
self.panel = PanelWidget()
self.dock = DockWidget()
self.pos_x = 0
def initialize(self):
"""
:return:
"""
layout = QHBoxLayout()
self.setLayout(layout)
self.panel.initialize()
self.panel.hide()
desktop = QApplication.desktop().availableGeometry()
x_size = desktop.width() * 0.2
y_size = desktop.height()
pos_x = desktop.width() - self.width() * 0.5
self.dock.setFixedSize(x_size, y_size)
self.move(pos_x, 0)
self.pos_x = pos_x
self.dock.initialize()
self.panel.resize(desktop.width() - x_size, desktop.height() - y_size)
layout.addWidget(self.panel)
layout.addWidget(self.dock)
self.dock.button.clicked.connect(self.expand_panel)
self.dock.show()
self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
def expand_panel(self):
"""
:return:
"""
if self.panel.isHidden():
self.panel.show()
else:
# self.move(self.pos_x, 0)
self.panel.hide()
self.adjustSize()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
main = MainWidget()
main.initialize()
main.show()
sys.exit(app.exec_())
【问题讨论】: