2015-01-22 2 views
2

У меня есть способ «свернуть» (свернуть) QDialog или QMainWindow до его заголовка?Свернуть (rollup) в заголовок (1 пиксельная проблема)

Текущее решение состоит в использовании:

self.setMinimumHeight(0); 
self.resize(self.width(), 1); 

используя высоту 0 т.е. self.resize(self.width(), 0);

вызывает диалоговое/окно/виджет, чтобы исчезнуть!

(Там нет шоу (..) скрывать() близко ..() или что-то событие выдается, а также диалог не разрушается, просто исчезает.)

Если диалог свернутый до 1-пиксель, пользователь может все еще изменить размер вручную, чтобы, наконец, иметь только строку заголовка (и некоторую связанную с os фреймборцию, но контент не отображается).

Есть приложения, которые могут сделать это с помощью любого окна, но это должно быть PyQt/PySide единственным решением, и оно работает, за исключением того, что крошечной граница ..

(Идея заключается в том, чтобы в основном имитирует Softimages окно-Накопительное для диалогов/инструментов, чтобы сохранить диалог в минимизированном (свернутом) состоянии на экране, не сводя его к минимуму до нижней части экрана.)

+0

Я всегда вижу немного границы на Windows, даже после того, как вручную изменение размеров, хотя и менее чем на 1 пиксель. Возможно, это непоследовательное поведение Qt. – Trilarion

ответ

1

Вы можете сделать это с помощью QMdiArea и его подокнов.

from PySide import QtGui 

qt_app = QtGui.QApplication([]) 

mdiArea = QtGui.QMdiArea() 

subWin= QtGui.QMdiSubWindow(mdiArea) 
subWin.setWindowTitle('Zero-height window') 

mainWindow = QtGui.QMainWindow() 
mainWindow.setCentralWidget(mdiArea) 
mainWindow.show()  
qt_app.exec_() 

Screenshot with PySide in Windows 7

QWidget Для изменения размера до нуля заставит его исчезнуть с экрана. Это относится и к QMdiSubWindow, но без содержимого он выглядит полностью «рухнувшим». Отражающая сторона - это не выглядит как точно так же, как и в обычном окне (хотя это, вероятно, меняется в зависимости от среды). Кроме того, после того, как заголовок будет заполнен виджетами, вам понадобится take care of resizing it yourself.

Для этого пользовательского интерфейса вы можете предпочесть что-то вроде QDockWidget, хотя оно имеет те же проблемы с изменением размера.

-1

Вы можете предотвратить вертикальное изменение размеров окна, используя фиксированную высоту:

self.setFixedHeight(1) 
+0

Я не думаю, что это решает вопрос. – Trilarion

+1

@Trilarion. Он исправляет проблему, упомянутую в вопросе о том, что пользователь может вручную изменить размер окна. Помимо этого, он решает проблему точно так же, как это делает OP. Таким образом, это не идеальное решение, но, безусловно, улучшение. Я не думаю, что идеальное решение возможно * вообще *, потому что не все стили позволяют затенять окно. 'QMdiSubWindow' выполняет хакерство, которое может заставить окно затенять должным образом, но я не знаю, можно ли это сделать с помощью окна верхнего уровня (я бы не догадался - это, вероятно, до оконного менеджера). – ekhumoro

+0

Ваш комментарий очень хороший. Я бы добавил его к ответу. Я не думаю, что высота 1 пикселя действительно отвечает на вопрос. Наличие нулевой высоты, вероятно, невозможно для QDialog ... – Trilarion

Смежные вопросы