Hi,
ich hab für ein Programm eine PYQT5 GUI unter Windows 10 mit dem QT Designer erstellt.
Wenn ich das Programm mit Windows 10 ausführe sieht es auch so aus wie es soll, aber unter Windows 11 ist die Schrift auf den Button auf einmal deutlich größer, und ragt über die Breite des Button selbst hinaus.
Nutzt Windows 11 einen anderen Font?
Was ist die Ursache und wie fix ich das?
Die Abstände und Größe der Elemente in der GUI scheinen auch fix zu sein und nicht mit der Fenstergröße zu Skalieren, was müsste ich im Designer tun um diesen Effekt zu erreichen?
Darstellung/Scalierung Windows 10 vs Windows 11
Schwer zu sagen, ohne deinen Code zu kennen. Wir ordnest du deine Widgets an? Benutzt du dafür einen Layout Manager?
Das hier klingt für mich als würdest du bisher einfach die Widgets händisch im Designer platzieren, ohne Manager:
Das hier klingt für mich als würdest du bisher einfach die Widgets händisch im Designer platzieren, ohne Manager:
GMAch hat geschrieben: Dienstag 27. Mai 2025, 08:04 Die Abstände und Größe der Elemente in der GUI scheinen auch fix zu sein und nicht mit der Fenstergröße zu Skalieren
Ich benutz Horinzontale und Vertikale Layout gepackt.snafu hat geschrieben: Dienstag 27. Mai 2025, 10:21 Schwer zu sagen, ohne deinen Code zu kennen. Wir ordnest du deine Widgets an? Benutzt du dafür einen Layout Manager?
Ich hab in der Regel eine Minumum Size eingegeben und die Font Größe der Buttons etwas erhöht aber sonst die Default einstellungen in Bezug auf die Size Policy so gelassen wie sie war.
Jetzt hab ich das Problem das die Beschrifftung der Buttons in Windows 11 plötzlich größer ist als die Buttons.
- __blackjack__
- User
- Beiträge: 13997
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@GMAch: Und wenn Du die MinimumSize raus nimmst? Denn wenn die kleiner ist als der Platz den der Inhalt braucht, hast Du genau dieses Problem.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Hi ich hab jetzt zumindest raus gefunden was das Problem Verursacht, es liegt nicht an der Windows Version sondern an der Anzeigen EInstellung.
Bei dem Windows 10 PC ist die Skalierung auf 100% gesetzt bei dem Windows 11 PC auf Grund des größeren Monitors auf 150%.
Wenn ich die Anzeigen Einstellung in WIndows 10 änder habe ich das selbe Problem. Es wirkt auf mich als würde die Texte (sowohl auf der Buttons als auch in QLabels) in der GUI Skalieren aber die Größe der Elemente (Sprich Buttons und Label) Nicht.
Bei dem Windows 10 PC ist die Skalierung auf 100% gesetzt bei dem Windows 11 PC auf Grund des größeren Monitors auf 150%.
Wenn ich die Anzeigen Einstellung in WIndows 10 änder habe ich das selbe Problem. Es wirkt auf mich als würde die Texte (sowohl auf der Buttons als auch in QLabels) in der GUI Skalieren aber die Größe der Elemente (Sprich Buttons und Label) Nicht.
Naja ich hätte halt gerne das die Buttons aus ästhetischen Gründen Gleich Groß sind, und das Schien mir der Einfachste Weg das zu erreichen.@GMAch: Und wenn Du die MinimumSize raus nimmst? Denn wenn die kleiner ist als der Platz den der Inhalt braucht, hast Du genau dieses Problem.
Hier hatte jemand ein ähnliches Problem nach einem Windows-Update, wobei bei ihm die Fonts wohl kleiner wurden:
https://forum.qt.io/topic/140909/fonts- ... ows-update
Vielleicht kannst du damit etwas anfangen?
https://forum.qt.io/topic/140909/fonts- ... ows-update
Vielleicht kannst du damit etwas anfangen?
- __blackjack__
- User
- Beiträge: 13997
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@GMAch: Einfach ist halt manchmal falsch. Gleich gross sind die doch schon automatisch wenn man die in einem Layout anordnet‽
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Nicht in einem Horizontalen Layout, jedenfalls nicht bei mir.__blackjack__ hat geschrieben: Dienstag 27. Mai 2025, 13:25 @GMAch: Einfach ist halt manchmal falsch. Gleich gross sind die doch schon automatisch wenn man die in einem Layout anordnet‽
Nach erwas Googlen hab ich jetzt erstmal noch die Zeile
Code: Alles auswählen
QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True)
Hallo,
nur um das nachzuvollziehen, meinst du in dem Fall mit "gleich Groß" die Länge der Buttons und nicht die Höhe?
Ich nutze bei so Sachen eine Kombination aus horizontalen und vertikalen Layouts oder Grid Layout.
Grüße
Dennis
nur um das nachzuvollziehen, meinst du in dem Fall mit "gleich Groß" die Länge der Buttons und nicht die Höhe?
Ich nutze bei so Sachen eine Kombination aus horizontalen und vertikalen Layouts oder Grid Layout.
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Wenn du die Sache mit den Layout und der Buttongröße Meinst.Dennis89 hat geschrieben: Dienstag 27. Mai 2025, 19:28 nur um das nachzuvollziehen, meinst du in dem Fall mit "gleich Groß" die Länge der Buttons und nicht die Höhe?
Ich nutze bei so Sachen eine Kombination aus horizontalen und vertikalen Layouts oder Grid Layout.
Ja, da ich auf allen Button die Selbe Schrift Größe habe sind sie automatisch gleich hoch, allerdings sind die Texte nicht gleich lang, und wenn ich einfach im Ot Designer ein horizontales Layout oder ein einzeiliges Grid darauf anwende ändert sich die länge der Buttons, ich hab außer der Mindestlänge keine Möglichkeit gefunden das zu vermeiden.
Zum wenn es um das eigendliche Problem geht hier sind mal zwei Bilder die ein Beispiel bei 100% und 125% zeigen.


Hier noch mal Links zu den Bildern in voller Größe.
100%
125%
- __blackjack__
- User
- Beiträge: 13997
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Okay, dann Mindestlänge, aber nicht fest angeben, sondern schauen wie gross beziehungsweise breit der breiteste Button ist:
Code: Alles auswählen
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QApplication, QHBoxLayout, QPushButton, QWidget
def main():
app = QApplication(sys.argv)
window = QWidget()
layout = QHBoxLayout()
buttons = []
for text in ["1", "Zwei", "Zweiundvierzig", "Viertausensiebenhundertelf"]:
button = QPushButton(text)
layout.addWidget(button)
buttons.append(button)
width = max(button.sizeHint().width() for button in buttons)
for button in buttons:
button.setMinimumWidth(width)
window.setLayout(layout)
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Also bei mir vergrößern sich die Buttons bei langen Texten weiterhin. Auch wenn die Mindestgröße zu klein gesetzt wird. Wäre ja auch komisch, weil dann der Name nicht zum Verhalten passen würde.__blackjack__ hat geschrieben: Dienstag 27. Mai 2025, 12:41 Denn wenn die kleiner ist als der Platz den der Inhalt braucht, hast Du genau dieses Problem.
Code: Alles auswählen
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QApplication, QHBoxLayout, QPushButton, QWidget
def set_button_width(buttons, scale=1):
width = max(button.sizeHint().width() for button in buttons)
if scale != 1:
width = int(width * scale)
for button in buttons:
button.setMinimumWidth(width)
def main():
app = QApplication(sys.argv)
window = QWidget()
layout = QHBoxLayout()
buttons = []
for text in ["1", "Zwei", "Zweiundvierzig", "Viertausensiebenhundertelf"]:
button = QPushButton(text)
layout.addWidget(button)
buttons.append(button)
set_button_width(buttons, 0.5)
window.setLayout(layout)
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
- __blackjack__
- User
- Beiträge: 13997
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@snafu: Ja klar vergrössern die sich, aber das Problem ist ja dass man sie *kleiner* machen kann als den Inhalt. Genau das Problem hat Dein Code ja jetzt auch. a) sind die initial jetzt wieder nicht gleich gross, und b) kann man das Fenster verkleinern so dass die Texte nicht mehr rein passen.
So sieht's bei Deinem Code direkt nach dem Start aus (oben) und ich kann das Fenster dann zu weit verkleinern (unten):

Beides sollte nicht so sein.
So sieht's bei Deinem Code direkt nach dem Start aus (oben) und ich kann das Fenster dann zu weit verkleinern (unten):

Beides sollte nicht so sein.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Ich scheine in meiner GUI irgendein Setting gemacht zu haben das das stretchen verhindert.
Wenn ich die Fenstergröße änder bewegen sich weder die Größe der Widgets noch ändert ich ihre Position, wenn ich das Beispiel von _blackjack_ ausführe ändern sich die Größen hingegen wenn ich die Fenstergröße änder, bin mir nicht ganz sicher wo der Unzterschied liegt.
Weiß nicht ob es hilft aber der Output vom Qt Designer nach der Umwandlung mit pyuic5 siegt so aus:
Wenn ich die Fenstergröße änder bewegen sich weder die Größe der Widgets noch ändert ich ihre Position, wenn ich das Beispiel von _blackjack_ ausführe ändern sich die Größen hingegen wenn ich die Fenstergröße änder, bin mir nicht ganz sicher wo der Unzterschied liegt.
Weiß nicht ob es hilft aber der Output vom Qt Designer nach der Umwandlung mit pyuic5 siegt so aus:
Code: Alles auswählen
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_TEST_Dialog(object):
def setupUi(self, TEST_Dialog):
TEST_Dialog.setObjectName("TEST_Dialog")
TEST_Dialog.resize(750, 245)
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
TEST_Dialog.setFont(font)
self.layoutWidget = QtWidgets.QWidget(TEST_Dialog)
self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 732, 225))
self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.COM_label = QtWidgets.QLabel(self.layoutWidget)
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
self.COM_label.setFont(font)
self.COM_label.setObjectName("COM_label")
self.gridLayout.addWidget(self.COM_label, 0, 0, 1, 1)
self.COM_spinBox = QtWidgets.QSpinBox(self.layoutWidget)
self.COM_spinBox.setMinimum(1)
self.COM_spinBox.setMaximum(256)
self.COM_spinBox.setObjectName("COM_spinBox")
self.gridLayout.addWidget(self.COM_spinBox, 0, 1, 1, 1)
self.COM_QR_label = QtWidgets.QLabel(self.layoutWidget)
font = QtGui.QFont()
font.setBold(False)
font.setWeight(50)
self.COM_QR_label.setFont(font)
self.COM_QR_label.setObjectName("COM_QR_label")
self.gridLayout.addWidget(self.COM_QR_label, 1, 0, 1, 1)
self.COM_QR_spinBox = QtWidgets.QSpinBox(self.layoutWidget)
self.COM_QR_spinBox.setMinimum(1)
self.COM_QR_spinBox.setMaximum(256)
self.COM_QR_spinBox.setObjectName("COM_QR_spinBox")
self.gridLayout.addWidget(self.COM_QR_spinBox, 1, 1, 1, 1)
self.horizontalLayout.addLayout(self.gridLayout)
self.verticalLayout.addLayout(self.horizontalLayout)
spacerItem1 = QtWidgets.QSpacerItem(20, 13, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem1)
self.Message_label = QtWidgets.QLabel(self.layoutWidget)
self.Message_label.setMinimumSize(QtCore.QSize(730, 120))
font = QtGui.QFont()
font.setPointSize(12)
self.Message_label.setFont(font)
self.Message_label.setFrameShape(QtWidgets.QFrame.WinPanel)
self.Message_label.setFrameShadow(QtWidgets.QFrame.Sunken)
self.Message_label.setText("")
self.Message_label.setAlignment(QtCore.Qt.AlignCenter)
self.Message_label.setWordWrap(True)
self.Message_label.setObjectName("Message_label")
self.verticalLayout.addWidget(self.Message_label)
spacerItem2 = QtWidgets.QSpacerItem(20, 13, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem2)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.Firmware_pushButton = QtWidgets.QPushButton(self.layoutWidget)
self.Firmware_pushButton.setMinimumSize(QtCore.QSize(130, 0))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.Firmware_pushButton.setFont(font)
self.Firmware_pushButton.setObjectName("Firmware_pushButton")
self.horizontalLayout_2.addWidget(self.Firmware_pushButton)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem3)
self.Test_pushButton = QtWidgets.QPushButton(self.layoutWidget)
self.Test_pushButton.setMinimumSize(QtCore.QSize(130, 0))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.Test_pushButton.setFont(font)
self.Test_pushButton.setObjectName("Test_pushButton")
self.horizontalLayout_2.addWidget(self.Test_pushButton)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem4)
self.SN_pushButton = QtWidgets.QPushButton(self.layoutWidget)
self.SN_pushButton.setMinimumSize(QtCore.QSize(130, 0))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.SN_pushButton.setFont(font)
self.SN_pushButton.setObjectName("SN_pushButton")
self.horizontalLayout_2.addWidget(self.SN_pushButton)
spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem5)
self.QR_pushButton = QtWidgets.QPushButton(self.layoutWidget)
self.QR_pushButton.setMinimumSize(QtCore.QSize(130, 0))
font = QtGui.QFont()
font.setPointSize(12)
self.QR_pushButton.setFont(font)
self.QR_pushButton.setObjectName("QR_pushButton")
self.horizontalLayout_2.addWidget(self.QR_pushButton)
spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem6)
self.Port_pushButton = QtWidgets.QPushButton(self.layoutWidget)
self.Port_pushButton.setMinimumSize(QtCore.QSize(130, 0))
font = QtGui.QFont()
font.setPointSize(12)
self.Port_pushButton.setFont(font)
self.Port_pushButton.setObjectName("Port_pushButton")
self.horizontalLayout_2.addWidget(self.Port_pushButton)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.COM_label.setBuddy(self.COM_spinBox)
self.COM_QR_label.setBuddy(self.COM_QR_spinBox)
self.retranslateUi(TEST_Dialog)
QtCore.QMetaObject.connectSlotsByName(TEST_Dialog)
def retranslateUi(self, TEST_Dialog):
_translate = QtCore.QCoreApplication.translate
TEST_Dialog.setWindowTitle(_translate("TEST_Dialog", "Production Test"))
self.COM_label.setText(_translate("TEST_Dialog", "COM-Port Test Adapter"))
self.COM_QR_label.setText(_translate("TEST_Dialog", "COM-Port Label Printer"))
self.Firmware_pushButton.setText(_translate("TEST_Dialog", "Firmware Upload"))
self.Test_pushButton.setText(_translate("TEST_Dialog", "Start Test"))
self.SN_pushButton.setText(_translate("TEST_Dialog", "Set SN Manually"))
self.QR_pushButton.setText(_translate("TEST_Dialog", "Print Label"))
self.Port_pushButton.setText(_translate("TEST_Dialog", "Scan Ports"))
Zuletzt geändert von GMAch am Mittwoch 28. Mai 2025, 14:36, insgesamt 1-mal geändert.
Mein code zum Aufruf der GUI sieht vereinfacht wie folgt aus:
Code: Alles auswählen
import sys
import os
from PyQt5 import QtCore
from PyQt5.QtWidgets import QDialog, QMessageBox, QInputDialog, QApplication
from Button_Test import *
QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True)
class Button_GUI(QDialog):
def __init__(self):
super().__init__()
self.ui = Ui_TEST_Dialog
self.ui.setupUi(self)
self.show()
if __name__=="__main__":
app = QApplication(sys.argv)
w = Button_GUI()
w.show()
sys.exit(app.exec_())
- __blackjack__
- User
- Beiträge: 13997
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@GMAch: Der Sternchen-Import sollte nicht sein. `os` wird importiert aber nirgends verwendet.
Die erste Zeile nach den Importen sollte in der Hauptfunktion stehen, wo auch der Rest vom Hauptprogramm stehen sollte.
Widgets zeigen sich nicht selbst an, also das ``self.show()`` sollte nicht sein. Ist ja auch gar nicht nötig, denn `w.show()` erledigt diesen Schritt ja. `w` ist zu kurz als Name.
`exec_()` ist veraltet und wird aus der API verschwinden (weiss gerade gar nicht ob es die Methode unter dem Namen in PyQt6 nicht schon nicht mehr gibt). Der Unterstrich war in Python 2 nötig, weil es dort ein ``exec``-Schlüsselwort gab, dass es in Python 3 nicht mehr gibt. Also nur `exec()`.
Quelltext aus *.ui-Dateien generieren macht man eigentlich nicht mehr. Man lädt die *.ui-Datei zur Laufzeit mit `PyQt5.uic.loadUi()`.
Im Designer gibt man dann den Buttons Namen und kann dann den Code dafür schreiben um die Mindestbreite auf den sizeHint des breitesten Buttons zu setzen.
Falls man den Buttons keine einzelnen Namen geben möchte/muss, kann man auch dem Containerwidget wo die Buttons drin sind, einen Namen geben und dann von dort aus nach den Kindern suchen die den passenden Datentyp haben.
Die erste Zeile nach den Importen sollte in der Hauptfunktion stehen, wo auch der Rest vom Hauptprogramm stehen sollte.
Widgets zeigen sich nicht selbst an, also das ``self.show()`` sollte nicht sein. Ist ja auch gar nicht nötig, denn `w.show()` erledigt diesen Schritt ja. `w` ist zu kurz als Name.
`exec_()` ist veraltet und wird aus der API verschwinden (weiss gerade gar nicht ob es die Methode unter dem Namen in PyQt6 nicht schon nicht mehr gibt). Der Unterstrich war in Python 2 nötig, weil es dort ein ``exec``-Schlüsselwort gab, dass es in Python 3 nicht mehr gibt. Also nur `exec()`.
Quelltext aus *.ui-Dateien generieren macht man eigentlich nicht mehr. Man lädt die *.ui-Datei zur Laufzeit mit `PyQt5.uic.loadUi()`.
Im Designer gibt man dann den Buttons Namen und kann dann den Code dafür schreiben um die Mindestbreite auf den sizeHint des breitesten Buttons zu setzen.
Code: Alles auswählen
import sys
from pathlib import Path
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QDialog
from PyQt5.uic import loadUi
UI_FILE_PATH = Path(__file__).parent / "test.ui"
class ButtonUi(QDialog):
def __init__(self):
super().__init__()
loadUi(UI_FILE_PATH, self)
buttons = [
self.first_button,
self.second_button,
self.third_button,
self.fourth_button,
]
width = max(button.sizeHint().width() for button in buttons)
for button in buttons:
button.setMinimumWidth(width)
def main():
QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True)
app = QApplication(sys.argv)
window = ButtonUi()
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Also ich hab jetzt mal etwas mit dem Designer gebastelt, was absichtlich größere Texte hat:

buttons.py:
buttons.ui:
Dafür habe ich stumpf ein GridLayout für das Fenster benutzt. Die Angaben für "row" und "column" übernimmt der Designer dann automatisch im XML. Der erkennt eigentlich ganz gut, was man wie positionieren möchte. Für den Text der Auswahl habe ich das Label in der Breite leicht über den letzten Button gezogen. Damit habe ich colspan=3 erreicht, andernfalls hätte längerer Text die Button-Breiten beeinflusst.
Jedenfalls verhält sich das beim Scrollen nun erwartungsgemäß. Da, wo die minimalen Breiten erreicht sind, blockiert er das weitere Verkleinern des Fensters. Vielleicht hilft es dir ja.

buttons.py:
Code: Alles auswählen
from functools import partial
from pathlib import Path
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi
UI_FILE_PATH = Path(__file__).parent / "buttons.ui"
class ButtonUi(QMainWindow):
def __init__(self):
super().__init__()
loadUi(UI_FILE_PATH, self)
buttons = [
self.short_text_button,
self.longer_text_button,
self.longest_text_button,
]
button_width = max(
button.sizeHint().width() for button in buttons
)
for button in buttons:
button.setMinimumWidth(button_width)
button.clicked.connect(partial(self.on_clicked, button))
def on_clicked(self, button):
self.selected_button_label.setText(f"'{button.text()}' was clicked")
def main():
QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True)
app = QApplication(sys.argv)
window = ButtonUi()
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>782</width>
<height>155</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>15</number>
</property>
<property name="topMargin">
<number>15</number>
</property>
<property name="rightMargin">
<number>15</number>
</property>
<property name="bottomMargin">
<number>15</number>
</property>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_3">
<property name="font">
<font>
<pointsize>12</pointsize>
<italic>true</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Welcome to the BUTTON APP</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="longest_text_button">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>This is a very long text for a button</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="longer_text_button">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>A bit longer text</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Choose a button:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="short_text_button">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Short text</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Your selection:</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="3">
<widget class="QLabel" name="selected_button_label">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>(no text button clicked)</string>
</property>
</widget>
</item>
</layout>
</widget>
<action name="action_Exit">
<property name="text">
<string>&Exit</string>
</property>
</action>
</widget>
<resources/>
<connections/>
</ui>
Jedenfalls verhält sich das beim Scrollen nun erwartungsgemäß. Da, wo die minimalen Breiten erreicht sind, blockiert er das weitere Verkleinern des Fensters. Vielleicht hilft es dir ja.

Hi, ich hab noch mal rum gespielt es muss da im Qt Designer irgend eine Fundamentale Einstellung geben die bei mir das Stretchen unterbindet (oder ich mach irgendwas beim Erstellen Fundamental falsch).
Ich hab Snafus XML code in eine .ui Datei Kopiert und mit dann mit seinem Python Code ausgeführt, und er funktioniert wie er soll.
Dann hab ich die Datei im QtDesigner geföffnet, die Widgets per "Strg A"+"Strg C" in ein anderes "QMainWindow" kopiert, das abgespeichert und mit dem selben Skrip ausgeführt, und es Funktioniert auf einmal nicht mehr.
Hier ist das Resultat:
Hab probiert dann meine GUI in die von Snafu zu kopieren krieg dann aber eine Fehlermeldung.
P.S.: Wie kann ich im QtDesigner im Gridlayout sowas wie "Colspan" und die genaue Zuweisung von Widgets zu bestimmten Zellen modifizieren?
Ich hab Snafus XML code in eine .ui Datei Kopiert und mit dann mit seinem Python Code ausgeführt, und er funktioniert wie er soll.
Dann hab ich die Datei im QtDesigner geföffnet, die Widgets per "Strg A"+"Strg C" in ein anderes "QMainWindow" kopiert, das abgespeichert und mit dem selben Skrip ausgeführt, und es Funktioniert auf einmal nicht mehr.
Hier ist das Resultat:
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>783</width>
<height>194</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="longer_text_button">
<property name="geometry">
<rect>
<x>339</x>
<y>60</y>
<width>159</width>
<height>27</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>A bit longer text</string>
</property>
</widget>
<widget class="QPushButton" name="longest_text_button">
<property name="geometry">
<rect>
<x>504</x>
<y>60</y>
<width>258</width>
<height>27</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>This is a very long text for a button</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>10</x>
<y>93</y>
<width>159</width>
<height>43</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Your selection:</string>
</property>
</widget>
<widget class="QPushButton" name="short_text_button">
<property name="geometry">
<rect>
<x>175</x>
<y>60</y>
<width>158</width>
<height>27</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Short text</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>10</x>
<y>11</y>
<width>323</width>
<height>43</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<italic>true</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Welcome to the BUTTON APP</string>
</property>
</widget>
<widget class="QLabel" name="selected_button_label">
<property name="geometry">
<rect>
<x>175</x>
<y>93</y>
<width>587</width>
<height>43</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>(no text button clicked)</string>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>10</x>
<y>60</y>
<width>159</width>
<height>27</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Choose a button:</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>783</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
Hab probiert dann meine GUI in die von Snafu zu kopieren krieg dann aber eine Fehlermeldung.
P.S.: Wie kann ich im QtDesigner im Gridlayout sowas wie "Colspan" und die genaue Zuweisung von Widgets zu bestimmten Zellen modifizieren?
- __blackjack__
- User
- Beiträge: 13997
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@GMAch: Du hast die Widgets kopiert aber nicht das Layout. In der Kopie hast Du also pixelgenaue absolute Positionen und Grössen.
Colspan/Rowspan und Positionierung in Zellen geht einfach durch Grössenveränderung und Drag & Drop im Grid.
Colspan/Rowspan und Positionierung in Zellen geht einfach durch Grössenveränderung und Drag & Drop im Grid.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis