ich möchte eine Buttonbar unten erstellen, die unter anderem ein komplettes Suchfeld enthält, mit der Option nach unten zu erweitern, z.B. mit "find, replace, replace all".
Ich versuche mit QGridLayout zwei horizonzale Bereiche zu erstellen, leider ist alles in einem Bereich.
Mein Code ist lauffähig.
Hoffe, Ihr könnt mir dabei helfen

Code: Alles auswählen
import sys
from PyQt5.QtCore import (
Qt,
)
from PyQt5.QtWidgets import (
QApplication,
QMainWindow,
QMdiArea,
QComboBox,
QGridLayout,
QLineEdit,
QPushButton,
QToolBar,
QWidget,
)
from PyQt5.QtGui import (
QFont,
)
class ButtonBar(QToolBar):
def __init__(self, parent=None):
super().__init__(parent=parent)
self.parent = parent
self.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.verticalLayout = QVBoxLayout()
self.layout = QGridLayout()
fontSize = 14
self.font = QFont('NimbusSansL', fontSize)
parent.searchComboSelection = 'AUTO', 'COMBO', 'SEARCH', 'REPLACE'
firstBarBelow = ['search', 'back', 'next']
secodBarBelow = ['find', 'replace', 'replace all']
for y, bar in enumerate([firstBarBelow, secodBarBelow]):
for x, button in enumerate(bar):
if button == 'search':
# create cömbobox
self.setComboBox(fontSize)
# create searchfield in toolbar
self.setSearchArea(fontSize)
self.layout.addWidget(self.setPushButton(button), y, x)
self.setLayout(self.layout)
def setComboBox(self, fontSize):
cb = QComboBox(self)
cb.setEnabled(True)
cb.setObjectName('combobox')
[cb.addItem(text) for text in self.parent.searchComboSelection]
cb.setCurrentText('AUTO')
self.comboState = cb.currentText()
cb.activated[str].connect(self.onChanged)
cb.setFont(self.font)
self.addWidget(cb)
def setSearchArea(self, fontSize):
sF = QLineEdit()
f = sF.font() # lineedit current font
f.setPointSize(fontSize) # change it's size
sF.setFont(f) # set font
sF.setFocusPolicy(Qt.StrongFocus)
sF.setPlaceholderText('Eingabe Suche')
sF.setObjectName('searchField')
sF.resize(200,40)
sF.setMaximumWidth(400)
sF.setMinimumHeight(40)
sF.setReadOnly(False) # True / False (write)
sF.installEventFilter(self)
self.addWidget(sF)
def setPushButton(self, button):
pushbutton = QPushButton(button.capitalize())
pushbutton.setLayout(self.layout)
pushbutton.setCheckable(False) # True / False
pushbutton.setEnabled(True)
pushbutton.setFont(self.font)
self.addWidget(pushbutton)
def onChanged(self, text):
print('onChanged', text)
class WindowMDI(QMainWindow):
def __init__(self):
super().__init__()
self.mdi = QMdiArea()
# set geomerty
self.setGeometry(100, 300, 1000, 500)
# toolbar below
self.addToolBar(Qt.BottomToolBarArea, ButtonBar(parent=self))
self.setCentralWidget(self.mdi)
def main():
App = QApplication(sys.argv)
obj = WindowMDI()
title = 'PyQt5 QMainWindow'
obj.setWindowTitle(title)
obj.show()
sys.exit(App.exec())
if __name__ == '__main__':
main()