PyQT - Positionierung und Anzeige von Benutzerdefinierte Widget
Ich bin versucht, PyQT, um die position und Anzeige einer benutzerdefinierten widget. So weit, ich habe ein widget, und mein Fenster. Ich habe erfolgreich die Anzeige des widget durch ein layout, aber ich bin interessiert mit .move(x,y) auf position mein widget vor Beginn der show()'ing es. So weit mein code ist wie folgt:
import sys, random
from PyQt4 import QtGui, QtCore
# Robot Widget
class RobotLink(QtGui.QWidget):
def __init__(self, parent, x, y, width, height, fill):
super(RobotLink, self).__init__(parent)
self._x = x
self._y = y
self._width = width
self._height = height
self._fill = fill
self._rotation = 0
def paintEvent(self, e):
painter = QtGui.QPainter()
painter.begin(self)
self.drawLink(painter)
painter.end()
def drawLink(self, painter):
painter.setPen(QtGui.QColor(0, 0, 0))
painter.setBrush(self._fill)
painter.drawEllipse(self._x, self._y, self._width, self._height)
# Window
class Window(QtGui.QWidget):
# Default Constructor, sets up the window GUI
def __init__(self):
super(Window, self).__init__()
self.initUI()
def initUI(self):
self._link1 = RobotLink(self, 225, 400, 30, 150, QtCore.Qt.DiagCrossPattern)
self._link2 = RobotLink(self, 0, 320, 30, 100, QtCore.Qt.Dense5Pattern)
self._link3 = RobotLink(self, 225, 260, 30, 75, QtCore.Qt.Dense2Pattern)
self._link1.move(0, 0)
self._link1.show()
self.setGeometry(300, 300, 800, 600)
self.setWindowTitle("CSCE 452 - PaintBot")
def paintEvent(self, e):
super(Window, self).paintEvent(e)
painter = QtGui.QPainter()
painter.begin(self)
self.drawBoundingBoxes(painter)
painter.end()
# Draws the boxes that define the robots workspace and
# the control panel
def drawBoundingBoxes(self, painter):
color = QtGui.QColor(0, 0, 0)
color.setNamedColor("#cccccc")
painter.setPen(color)
# Draw the robot workspace
painter.setBrush(QtGui.QColor(255, 255, 255))
painter.drawRect(10, 10, 500, 578)
# Draw the control panel workspace
painter.setBrush(QtGui.QColor(150, 150, 150))
painter.drawRect(520, 10, 270, 578)
# Draws the slider 'base'
painter.setPen(QtGui.QColor(0, 0, 0))
painter.drawLine(100, 570, 400, 570)
def changeValue(self, value):
self.wid.emit(QtCore.SIGNAL("updateRobot(int)"), value)
self.wid.repaint()
# Setup the Window, and the Robot
app = QtGui.QApplication(sys.argv)
win = Window()
win.show()
app.exec_()
Keine Idee, wie befestige mein widget, ohne ein layout, positionieren Sie es und haben es in meinem Fenster?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Paar Dinge, die ich bemerkte in Ihrem code:
die Sie nicht wirklich brauchen, um zu definieren, speichern, x, y, Breite und Höhe für Ihre benutzerdefinierte widget. Rufen Sie einfach setGeometry mit den übergebenen Koordinaten in den Konstruktor. Widget bereits Anbieter getGeometry, getHeight, getWidth, etc. die Methoden, die Sie verwenden können, um zu manipulieren und zu malen Sie Ihre Komponente.
beim Aufruf drawEllipse in das Kind-widget drawLink Methode, Sie ' re passing x-und y-Koordinaten in der Funktion als Rechteck Anfang. Von meinem Verständnis sollte dort 0, 0, wie diese koordiniert werden sollte, widget relativ nicht die Fenster relativ.
Habe ich einige änderungen vorgenommen, um Ihren code sehen, ob es für Sie arbeitet
hoffe das hilft, Grüße