2017-12-22 6 views
0

Auf diese Frage ich beziehe mich auf das Beispiel calculator.py von http://zetcode.com/gui/pyqt5/layout/PyQt5: Wie fixiere ich die Breite/Höhe einer bestimmten Spalte/Zeile in QGridLayout?

Im Beispiel wird die QGridLayout verwendet wurde. Ich möchte fragen, ob es möglich ist, die Breite/Höhe für bestimmte Spalten/Zeilen zu definieren?

Bitte sehen Sie das Bild. enter image description here Zum Beispiel möchte ich die zweite Spalte hat die Breite von 50px und die dritte Zeile hat die Höhe 80px. So, egal wie groß/klein das Fenster ist, diese 50px und 80px werden immer wie definiert angezeigt. Die restlichen Zeilen/Spalten können automatisch skaliert werden, wenn sich die Fenstergröße ändert.

Ich habe gesucht, konnte aber nicht die Antwort finden.

Danke für Ihre Hilfe und Hinweis!

UPDATE: Für Ihre Bequemlichkeit ich fügen Sie den Code hier (mit kleinen Änderungen an der ursprünglichen Version)

# -*- coding: utf-8 -*- 

import sys 
from PyQt5.QtWidgets import (QWidget, QGridLayout, QPushButton, QApplication) 

class Example(QWidget): 
    def __init__(self): 
     super(Example, self).__init__() 
     self.initUI() 

    def initUI(self): 

     grid = QGridLayout() 
     self.setLayout(grid) 

     names = ['Cls', 'Bck', '', 'Close', 
       '7', '8', '9', '/', 
       '4', '5', '6', '*', 
       '1', '2', '3', '-', 
       '0', '.', '=', '+'] 

     positions = [(i,j) for i in range(5) for j in range(4)] 

     for position, name in zip(positions, names): 
      if name == '': 
       continue 
      button = QPushButton(name) 
      grid.addWidget(button, *position) 

     self.move(300, 150) 
     self.setWindowTitle('Calculator') 
     self.show() 


if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 
+0

zeigen Sie Ihren Code. – eyllanesc

+0

@eyllanesc Bitte beachten Sie den obigen Code. Ich könnte nur den Originalcode einfügen, weil ich keine Ahnung habe, wie ich diese Frage machen soll. –

Antwort

1

Eine mögliche Lösung ist es, die festen Abmessungen des Widgets zu setzen, wie unten dargestellt:

class Example(QWidget): 
    def __init__(self): 
     super(Example, self).__init__() 
     self.initUI() 

    def initUI(self): 

     grid = QGridLayout() 
     self.setLayout(grid) 

     names = ['Cls', 'Bck', '', 'Close', 
       '7', '8', '9', '/', 
       '4', '5', '6', '*', 
       '1', '2', '3', '-', 
       '0', '.', '=', '+'] 

     positions = [(i,j) for i in range(5) for j in range(4)] 

     for position, name in zip(positions, names): 
      if name == '': 
       continue 
      button = QPushButton(name) 
      row, column = position 
      if row == 2: 
       button.setFixedHeight(80) 
      if column == 1: 
       button.setFixedWidth(50) 
      grid.addWidget(button, *position) 

     self.move(300, 150) 
     self.setWindowTitle('Calculator') 
     self.show() 

Ausgang:

enter image description here

+0

Danke für Ihre Hilfe! Es ist in der Tat eine gute Methode. Aber ich möchte eigentlich eine allgemeinere Lösung haben. In einigen Fällen handelt es sich nicht um eine einfache Drucktaste, sondern um ein komplexeres Layout/Widget in einem QGridLayout. –

+0

Leider gibt es keine allgemeine Lösung – eyllanesc

Verwandte Themen