Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to disable the window maximize icon using PyQt4?

I would like to know how to disable the window Maximise button in pyqt4. I am at present using QWidget.setFixedSize (self, QSize) to prevent user window resizing, however the maximise button is still enabled and when pressed causes the application to move to the top left corner of the screen. I am basically wanting to replicate the behaviour of the Windows calculator application, where the maximise icon is greyed out. Does anyone know how to achieve this with PyQt4?

like image 537
jim Avatar asked Sep 03 '13 19:09

jim


People also ask

How do I hide maximize button in Qt?

To turn off the Maximize Button on the default windows, set the max size of your Window on your Ui file. You will notice the Maximize button is greyed out when you run your program.

How do I close a pyqt5 window?

The simplest way to close a window is to click the right (Windows) or left (macOS) 'X' button on the title bar.

How do I create a window in pyqt5?

We set the window size using the setGeometry(left,top,width,height) method. The window title is set using setWindowTitle(title). Finally show() is called to display the window.


5 Answers

This works perfectly:

MainWindow.setWindowFlags(QtCore.Qt.WindowCloseButtonHint | QtCore.Qt.WindowMinimizeButtonHint)
like image 142
tech kamar Avatar answered Nov 04 '22 02:11

tech kamar


Haven't worked with it but research seems to point to messing with the window flags.

QWidget has a method called setWindowFlags.

Here is the doc for the Qt.WindowFlags class.

Here is a reference for all of the flags. Look for Qt.WindowMaximizeButtonHint

In general it seems like you need to find a way to enable the Qt.CustomizeWindowHint flag and disable the Qt.WindowMaximizeButtonHint flag. Either way, you probably want this in addition to setFixedSize so that's a good start.

Edit:

Something like

win.setWindowFlags(win.windowFlags() | QtCore.Qt.CustomizeWindowHint)
win.setWindowFlags(win.windowFlags() & ~QtCore.Qt.WindowMaximizeButtonHint)

Assuming your import is something like this

from PyQt4 import QtCore

This would turn on the CustomizeWindowHint flag and turn off the WindowMaximizeButtonHint flag, I hope. Let me know if this works at all.

Edit:

As discovered by OP, the only call necessary for his desired outcome:

win.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)

but beware, since this will also remove the close button and potentially mess with other window flags.

like image 45
Brian Avatar answered Nov 04 '22 00:11

Brian


you could set the maximumSize and minimumSize with the same values, it'll get to dissapear maximise button

like image 20
GSandro_Strongs Avatar answered Nov 04 '22 01:11

GSandro_Strongs


This helped me:

Form.setMaximumSize(QtCore.QSize(width, height))

It would go here in your class:

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(328, 212)
        Form.setMaximumSize(QtCore.QSize(352, 189))
like image 33
Saa Gar Avatar answered Nov 04 '22 00:11

Saa Gar


This works in PyQT6:

MainWindow.setWindowFlags(QtCore.Qt.WindowType.CustomizeWindowHint | QtCore.Qt.WindowType.WindowCloseButtonHint | QtCore.Qt.WindowType.WindowMinimizeButtonHint)

Hope it's useful!

like image 41
Clayton Maciel Avatar answered Nov 04 '22 00:11

Clayton Maciel