2017-07-06 4 views
1

Können Sie mir sagen, wie Leerzeichen zwischen Schaltflächen in meinem Widget löschen? Ich möchte es tun, indem ich Befehl, setSpacing(0) setze, aber ich weiß nicht, wo ich es einstellen sollte.PyQt: setSpacing in QGridLayout

Mein Code:

import sys 
from PyQt5.QtCore import pyqtSignal, QObject 
from PyQt5.QtWidgets import QMainWindow, QApplication, QGridLayout, 
QPushButton,QWidget 


class Saper(QWidget): 

    def __init__(self): 
     super().__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', '.', '=', '+', 
       'f','i','f','i'] 

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

     for position, name in zip(positions, names): 

     if name == '': 
      continue 
     button = QPushButton(name) 
     button.setMinimumSize(20,20) 
     button.setMaximumSize(20,20) 
     grid.addWidget(button, *position) 


    self.setGeometry(300,300,300,300) 
    self.setWindowTitle('Title') 
    self.move(300, 150) 
    self.show() 

if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = Saper() 
    sys.exit(app.exec_()) 

Antwort

0

Ok, ich habe es. Wenn jemand dieses Problem haben wird, ist hier eine Lösung. Ich habe meine Konzeption, Klasse Saper-Inherenten von QWidget geändert und nun enthält Tabellennamen kleinere Tables mit Namen. Zuerst für zählt Elemente in großen Tabellen und zweitens für zählt Elemente in kleineren Tabellen. Ich füge jedes Element zu einer horizontalen Box hinzu und füge dann diese horizontale Box zur vertikalen Box hinzu. Ich wiederhole diese Aktion für jede Zeile. Es ist wichtig, eine neue horizontale Box zu erstellen, nachdem die alte vertikale Box hinzugefügt wurde:

import sys 
from PyQt5.QtCore import pyqtSignal, QObject 
from PyQt5.QtWidgets import (QWidget, QPushButton, 
QHBoxLayout, QVBoxLayout, QApplication) 



class Saper(QWidget): 

    def __init__(self): 
     super().__init__() 
     self.initUI() 

    def initUI(self): 

     vbox = QVBoxLayout() 
     vbox.setSpacing(0) 
     vbox.addStretch(1) 


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


     for pos in names: 
      hbox = QHBoxLayout() 
      hbox.addStretch(1) 
      hbox.setSpacing(0) 
      for name in pos: 

       button = QPushButton(name) 
       button.setMinimumSize(75,60) 
       button.setMaximumSize(75,60) 
       hbox.addWidget(button) 
      vbox.addLayout(hbox) 

     self.setLayout(vbox) 
     self.setGeometry(300,300,300,300) 
     self.setWindowTitle('Title') 
     self.move(300, 150) 
     self.show() 

if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = Saper() 
    sys.exit(app.exec_()) 
+0

Sie könnten eine kurze Erklärung Ihrer Lösung geben, damit die anderen verstehen können. – eyllanesc

+0

Ich habe meine Vorstellung geändert, Klasse Saper Inherent von QWidget und jetzt Tabellennamen enthält kleinere Tabellen mit Namen. Zuerst für zählt Elemente in großen Tabellen und zweitens für zählt Elemente in kleineren Tabellen. Ich füge jedes Element zu einer horizontalen Box hinzu und füge dann diese horizontale Box zur vertikalen Box hinzu. Ich wiederhole diese Aktion für jede Zeile. Wichtig ist, eine neue horizontale Box zu erstellen, nachdem die alte vertikale Box hinzugefügt wurde. –

+0

[Bearbeiten] (https://Stackoverflow.com/posts/44945631/edit) Ihre Antwort und fügen Sie diese Informationen bitte hinzu. – eyllanesc