Qt textEdit Window size
-
I have a textEdit window that I would like to use as much of its parent window as possible. Currently it looks like ![alt text]( image url)The window with the words cube(); is the textEdit Window. The Window below it is for messages and its height is set and its set to only output.
I would like the textEdit window to use as much of the parent window as possible. The code is running under FreeCAD so I don't have easy access to the parent window. If I print out the details of the textEdit windows viewport it reports 640 x 480 which seems to be the restriction I am hitting and I don't know how to change. If I print out the maximumHeight it is 16777215.
I have tried setting maximimumHeight and
sizepolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)) self.textEdit.setSizePolicy(sizepolicy)
but that made no difference Minimum code looks like
layouth=QtGui.QHBoxLayout() layouth.addWidget(self.buttonadd) layouth.addWidget(self.buttonload) layouth.addWidget(self.buttonsave) layouth.addWidget(self.buttonrefresh) layouth.addWidget(self.buttonclear) layout= QtGui.QVBoxLayout() layout.addLayout(layouth) layout.addWidget(self.checkboxmesh) layout.addWidget(self.textEdit) layout.addWidget(self.textMsg) self.setLayout(layout)
-
Hi,
Give you text edit a stretch factor. That will make it take more place.
-
Already tried
layout.addWidget(self.textEdit,2) layout.addWidget(self.textMsg,1)
But no change.
Think as its a textEdit window there is a scrollArea attached and if I print out its height it is 480 pixels which what I am seeing, but no idea how to influence, tried changing various options on setSizePolicy but again no change.
-
@KeithSloan said in Qt textEdit Window size:
Think as its a textEdit window there is a scrollArea attached
This is not clear.
Can you provide the full layout setup code ?
-
The following code is in a FreeCAD workbench. I have no control over parent window, just want to size to what it makes available
which varies on how the user controls various windows.class AddSCADWidget(QtGui.QWidget): def __init__(self,*args): QtGui.QWidget.__init__(self,*args) # Main text area self.textEdit=QtGui.QTextEdit() self.textEdit.setAcceptRichText(False) # Following line Made no difference self.textEdit.setMaximumHeight(4096) # Following made no difference also tried QSizePolicyExpanding self.textEdit.setSizePolicy(QtGui.QSizePolicy.Expanding, \ QtGui.QSizePolicy.MinimumExpanding) print(self.textEdit.sizePolicy()) print(self.textEdit.sizeHint()) print(self.textEdit.viewport()) vp = self.textEdit.viewport() print(vp.maximumHeight()) print(vp.height()) print(vp.sizeHint()) # following did not make any difference vp.setSizePolicy(QtGui.QSizePolicy.Expanding, \ QtGui.QSizePolicy.Expanding) print(vp.sizePolicy() # Message Area self.textMsg=QtGui.QPlainTextEdit() self.textMsg.setReadOnly(True) h = int(2.5 * self.textMsg.fontMetrics().height()) self.textMsg.setMaximumHeight(h) self.textMsg.resize(self.textMsg.width(),h) self.buttonadd = QtGui.QPushButton(translate('OpenSCAD','Add')) self.buttonclear = QtGui.QPushButton(translate('OpenSCAD','Clear')) self.buttonload = QtGui.QPushButton(translate('OpenSCAD','Load')) self.buttonsave = QtGui.QPushButton(translate('OpenSCAD','Save')) self.buttonrefresh = QtGui.QPushButton(translate('OpenSCAD','Refresh')) self.checkboxmesh = QtGui.QCheckBox(translate('OpenSCAD','as Mesh')) layouth=QtGui.QHBoxLayout() layouth.addWidget(self.buttonadd) layouth.addWidget(self.buttonload) layouth.addWidget(self.buttonsave) layouth.addWidget(self.buttonrefresh) layouth.addWidget(self.buttonclear) layout= QtGui.QVBoxLayout() layout.addLayout(layouth) layout.addWidget(self.checkboxmesh) #layout.addWidget(self.textEdit, 6) #layout.addWidget(self.textMsg, 1) layout.addWidget(self.textEdit) layout.addWidget(self.textMsg) layout.setStretch(0,0) layout.setStretch(1,0) layout.setStretch(2,1) layout.setStretch(3,0) self.setLayout(layout) self.setWindowTitle(translate('OpenSCAD','Add OpenSCAD Element')) self.textEdit.setText(u'cube();') self.buttonclear.clicked.connect(self.textEdit.clear)
-
What do you get if you use just this:
class AddSCADWidget(QtGui.QWidget): def __init__(self,*args): QtGui.QWidget.__init__(self,*args) # Main text area self.textEdit=QtGui.QTextEdit() # Message Area self.textMsg=QtGui.QPlainTextEdit() self.textMsg.setReadOnly(True) h = int(2.5 * self.textMsg.fontMetrics().height()) self.textMsg.setMaximumHeight(h) layout= QtGui.QVBoxLayout(self) layout.addWidget(self.textEdit, 2) layout.addWidget(self.textMsg, 1)
-
It looks like you only have access to half a widget ?
That's strange, what if you addself.textEdit.setMinimumHeight(4096)
? -
Setting minimumHeight(4096) ( And removing message Window ) still does not expand the the textEdit![alt text]( image url)
-
This is getting stranger and stranger... what if you use setFixedSize ?
-
You shouldn't need to do that.
How are you integrating your code with FreeCAD ?
-
It is a FreeCAD workbench so it exists in a subdirectory of Mod in the FreeCAD file structure and as FreeCAD finds a InitGui.py and Init.py file it gets invoked. When the user selects the workbench in this case OpenSCAD it gets started, which registers a number of icons. Press on one of these icons invokes code that creates the boxes in one of the FreeCAD windows, the window can vary in size depending on users monitor, whether is has the Combo View panel displayed and can adjust the size of the Combo window.
-
class AddSCADTask: def __init__(self): self.form = AddSCADWidget() class AddSCADWidget(QtGui.QWidget): def __init__(self,*args): QtGui.QWidget.__init__(self,*args) # Main text area self.textEdit=QtGui.QTextEdit() .... etc ... class AddOpenSCADElement: def IsActive(self): return not FreeCADGui.Control.activeDialog() def Activated(self): panel = AddSCADTask() FreeCADGui.Control.showDialog(panel)
-
Okay in AddSCADTask I added a print(dir(self.form) and got
19:54:00 ['DrawChildren', 'DrawWindowBackground', 'IgnoreMask', 'PaintDeviceMetric', 'PdmDepth', 'PdmDevicePixelRatio', 'PdmDevicePixelRatioScaled', 'PdmDpiX', 'PdmDpiY', 'PdmHeight', 'PdmHeightMM', 'PdmNumColors', 'PdmPhysicalDpiX', 'PdmPhysicalDpiY', 'PdmWidth', 'PdmWidthMM', 'RenderFlag', 'RenderFlags', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'acceptDrops', 'accessibleDescription', 'accessibleName', 'actionEvent', 'actions', 'activateWindow', 'addAction', 'addActions', 'adjustSize', 'autoFillBackground', 'backgroundRole', 'backingStore', 'baseSize', 'blockSignals', 'changeEvent', 'childAt', 'childEvent', 'children', 'childrenRect', 'childrenRegion', 'clearFocus', 'clearMask', 'close', 'closeEvent', 'colorCount', 'connect', 'connectNotify', 'contentsMargins', 'contentsRect', 'contextMenuEvent', 'contextMenuPolicy', 'create', 'createWinId', 'createWindowContainer', 'cursor', 'customContextMenuRequested', 'customEvent', 'deleteLater', 'depth', 'destroy', 'destroyed', 'devType', 'devicePixelRatio', 'devicePixelRatioF', 'devicePixelRatioFScale', 'disconnect', 'disconnectNotify', 'dragEnterEvent', 'dragLeaveEvent', 'dragMoveEvent', 'dropEvent', 'dumpObjectInfo', 'dumpObjectTree', 'dynamicPropertyNames', 'effectiveWinId', 'emit', 'ensurePolished', 'enterEvent', 'event', 'eventFilter', 'find', 'findChild', 'findChildren', 'focusInEvent', 'focusNextChild', 'focusNextPrevChild', 'focusOutEvent', 'focusPolicy', 'focusPreviousChild', 'focusProxy', 'focusWidget', 'font', 'fontInfo', 'fontMetrics', 'foregroundRole', 'frameGeometry', 'frameSize', 'geometry', 'getContentsMargins', 'grab', 'grabGesture', 'grabKeyboard', 'grabMouse', 'grabShortcut', 'graphicsEffect', 'graphicsProxyWidget', 'hasFocus', 'hasHeightForWidth', 'hasMouseTracking', 'hasTabletTracking', 'height', 'heightForWidth', 'heightMM', 'hide', 'hideEvent', 'inherits', 'initPainter', 'inputMethodEvent', 'inputMethodHints', 'inputMethodQuery', 'insertAction', 'insertActions', 'installEventFilter', 'internalWinId', 'isActiveWindow', 'isAncestorOf', 'isEnabled', 'isEnabledTo', 'isEnabledToTLW', 'isFullScreen', 'isHidden', 'isLeftToRight', 'isMaximized', 'isMinimized', 'isModal', 'isRightToLeft', 'isSignalConnected', 'isTopLevel', 'isVisible', 'isVisibleTo', 'isWidgetType', 'isWindow', 'isWindowModified', 'isWindowType', 'keyPressEvent', 'keyReleaseEvent', 'keyboardGrabber', 'killTimer', 'layout', 'layoutDirection', 'leaveEvent', 'locale', 'logicalDpiX', 'logicalDpiY', 'lower', 'mapFrom', 'mapFromGlobal', 'mapFromParent', 'mapTo', 'mapToGlobal', 'mapToParent', 'mask', 'maximumHeight', 'maximumSize', 'maximumWidth', 'metaObject', 'metric', 'minimumHeight', 'minimumSize', 'minimumSizeHint', 'minimumWidth', 'mouseDoubleClickEvent', 'mouseGrabber', 'mouseMoveEvent', 'mousePressEvent', 'mouseReleaseEvent', 'move', 'moveEvent', 'moveToThread', 'nativeEvent', 'nativeParentWidget', 'nextInFocusChain', 'normalGeometry', 'objectName', 'objectNameChanged', 'overrideWindowFlags', 'overrideWindowState', 'paintEngine', 'paintEvent', 'painters', 'paintingActive', 'palette', 'parent', 'parentWidget', 'physicalDpiX', 'physicalDpiY', 'pos', 'previousInFocusChain', 'property', 'raise_', 'receivers', 'rect', 'redirected', 'registerUserData', 'releaseKeyboard', 'releaseMouse', 'releaseShortcut', 'removeAction', 'removeEventFilter', 'render', 'repaint', 'resize', 'resizeEvent', 'restoreGeometry', 'retranslateUi', 'saveGeometry', 'scroll', 'sender', 'senderSignalIndex', 'setAcceptDrops', 'setAccessibleDescription', 'setAccessibleName', 'setAttribute', 'setAutoFillBackground', 'setBackgroundRole', 'setBaseSize', 'setContentsMargins', 'setContextMenuPolicy', 'setCursor', 'setDisabled', 'setEnabled', 'setFixedHeight', 'setFixedSize', 'setFixedWidth',... 19:54:00
Does that help at all?
Sorry don't know how to edit this so its not all on one line.
-
Is there a documentation that describes the process to do that task ? I think you might be missing some minor details to get your widget rendered correctly.