ich will in einem borderlayout ein selbst gezeichnets widget im norder platzieren. Das Problem ist das es nicht angezeigt wird. (im Zentrum aber schon). Könnte bitte einer von euch über den code gucken.
Hier ist mein code:
BorderLayout.py (aus den Examples):
Code: Alles auswählen
import sys
from PyQt4 import QtCore, QtGui
class ItemWrapper(object):
def __init__(self, i, p):
self.item = i
self.position = p
class BorderLayout(QtGui.QLayout):
West, North, South, East, Center = range(5)
MinimumSize, SizeHint = range(2)
def __init__(self, parent=None, margin=0, spacing=0):
QtGui.QLayout.__init__(self, parent)
self.setMargin(margin)
self.setSpacing(spacing)
self.list = []
def __del__(self):
l = self.takeAt(0)
while l:
l = self.takeAt(0)
def addItem(self, item):
self.add(item, BorderLayout.West)
def addWidget(self, widget, position):
self.add(QtGui.QWidgetItem(widget), position)
def expandingDirections(self):
return QtCore.Qt.Horizontal | QtCore.Qt.Vertical
def hasHeightForWidth(self):
return False
def count(self):
return len(self.list)
def itemAt(self, index):
if index < len(self.list):
return self.list[index].item
return None
def minimumSize(self):
return self.calculateSize(BorderLayout.MinimumSize)
def setGeometry(self, rect):
center = 0
eastWidth = 0
westWidth = 0
northHeight = 0
southHeight = 0
centerHeight = 0
QtGui.QLayout.setGeometry(self, rect)
for wrapper in self.list:
item = wrapper.item
position = wrapper.position
if position == BorderLayout.North:
item.setGeometry(QtCore.QRect(rect.x(), northHeight, rect.width(), item.sizeHint().height()))
northHeight += item.geometry().height() + self.spacing()
elif position == BorderLayout.South:
item.setGeometry(QtCore.QRect(item.geometry().x(), item.geometry().y(), rect.width(), item.sizeHint().height()))
southHeight += item.geometry().height() + self.spacing()
item.setGeometry(QtCore.QRect(rect.x(), rect.y() + rect.height() - southHeight + self.spacing(), item.geometry().width(), item.geometry().height()))
elif position == BorderLayout.Center:
center = wrapper
centerHeight = rect.height() - northHeight - southHeight
for wrapper in self.list:
item = wrapper.item
position = wrapper.position
if position == BorderLayout.West:
item.setGeometry(QtCore.QRect(rect.x() + westWidth, northHeight, item.sizeHint().width(), centerHeight))
westWidth += item.geometry().width() + self.spacing()
elif position == BorderLayout.East:
item.setGeometry(QtCore.QRect(item.geometry().x(), item.geometry().y(), item.sizeHint().width(), centerHeight))
eastWidth += item.geometry().width() + self.spacing()
item.setGeometry(QtCore.QRect(rect.x() + rect.width() - eastWidth + self.spacing(), northHeight, item.geometry().width(), item.geometry().height()))
if center:
center.item.setGeometry(QtCore.QRect(westWidth, northHeight, rect.width() - eastWidth - westWidth, centerHeight))
def sizeHint(self):
return self.calculateSize(BorderLayout.SizeHint)
def takeAt(self, index):
if index >= 0 and index < len(self.list):
layoutStruct = self.list.pop(index)
return layoutStruct.item
return None
def add(self, item, position):
self.list.append(ItemWrapper(item, position))
def calculateSize(self, sizeType):
totalSize = QtCore.QSize()
for wrapper in self.list:
position = wrapper.position
itemSize = QtCore.QSize()
if sizeType == BorderLayout.MinimumSize:
itemSize = wrapper.item.minimumSize()
else: # sizeType == BorderLayout.SizeHint
itemSize = wrapper.item.sizeHint()
if position == BorderLayout.North or position == BorderLayout.South or position == BorderLayout.Center:
totalSize.setHeight(totalSize.height() + itemSize.height())
if position == BorderLayout.West or position == BorderLayout.East or position == BorderLayout.Center:
totalSize.setWidth(totalSize.width() + itemSize.width())
return totalSize
Code: Alles auswählen
from PyQt4 import QtGui, QtCore
import sys
class MeinWidget(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent);
self.pen = QtGui.QPen(QtGui.QColor(0,0,0));
self.pen.setWidth(1);
self.pen.setStyle(QtCore.Qt.DashDotLine);
self.brush = QtGui.QBrush(QtGui.QColor(255,255,255));
def paintEvent(self, event):
painter = QtGui.QPainter(self);
painter.setPen(self.pen);
painter.setBrush(self.brush);
painter.drawRect(0,0,1,1);
Code: Alles auswählen
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
from BorderLayout import BorderLayout
from MeinWidget import MeinWidget
class Window(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
layout = BorderLayout()
label = []
label.append(QtGui.QLabel("westen"))
label.append(QtGui.QLabel(u"sünden"))
label.append(QtGui.QLabel("zentral"))
label.append(QtGui.QLabel("osten"))
for l in label[:]:
l.setAlignment(QtCore.Qt.AlignCenter)
layout.addWidget(label[0], BorderLayout.West)
layout.addWidget(label[1], BorderLayout.South)
layout.addWidget(label[2], BorderLayout.Center)
layout.addWidget(label[3], BorderLayout.East)
widget = MeinWidget()
#widget = QtGui.QPushButton("test")
layout.addWidget(widget, BorderLayout.North);
self.setLayout(layout)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())