Reputation: 133
My problem is self.spdBar.setGeometry not working for imported widget, please can someone explain what I doing wrong?
here is the main.py code:
from PyQt4 import QtGui, QtCore
import sys
from src.cprg import cPrg
class mainWindow(QtGui.QWidget):
def __init__(self):
self.spdBar = cPrg()
super(mainWindow, self).__init__()
self.initUi()
def initUi(self):
self.spdBar.setGeometry(10,10,10,10)
self.spdBar.setValue(.5)
# self.showFullScreen()
self.setGeometry(100, 100, 800, 480)
self.setWindowTitle('Window Title')
self.show()
def close_app(self):
sys.exit()
def main():
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_X11InitThreads)
app = QtGui.QApplication(sys.argv)
gui = mainWindow()
gui.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
here is custom widget py file:
from PyQt4 import QtGui, QtCore
from PyQt4.Qt import QPen
class cPrg(QtGui.QWidget):
def __init__(self):
super(cPrg, self).__init__()
self.lineWidth = 0
self.setValue(0.0)
def setValue(self, val):
val = float(min(max(val, 0), 1))
self._value = -270 * val
self.update()
def setLineWidth(self, lineWidth):
self.lineWidth = lineWidth
def paintEvent(self, e):
painter = QtGui.QPainter(self)
painter.setRenderHint(painter.Antialiasing)
#outerRadius = min(self.width()/2, self.height()/2)
r = QtCore.QRect(15,15,300,300) #<-- create rectangle
startAngle = 270 * 16 # <-- set start angle to draw arc
endAngle = -270 * 16 # <-- set end arc angle
painter.setPen(QPen(QtGui.QColor('#000000'), 3)) # self.lineWidth)) # <-- arc color
# painter.setBrush(QtCore.Qt.HorPattern)
painter.drawArc(r, startAngle, endAngle) # <-- draw arc
# arc prg
painter.save()
painter.setPen(QPen(QtGui.QColor('#ffffff'), 30))
painter.drawArc(r, startAngle, self._value * 16)
painter.restore()
painter.end()
super(cPrg, self).paintEvent(e)
My guess that something wrong in paintEvent function.
UPDATE:
from PyQt4 import QtGui, QtCore
from PyQt4.Qt import QPen
class cPrg(QtGui.QWidget):
def __init__(self, parent=None):
super(cPrg, self).__init__(parent)
self.lineWidth = 0
self.setValue(0.0)
def setValue(self, val):
val = float(min(max(val, 0), 1))
self._value = -270 * val
self.update()
def setLineWidth(self, lineWidth):
self.lineWidth = lineWidth
def paintEvent(self, e):
painter = QtGui.QPainter(self)
painter.setRenderHint(painter.Antialiasing)
# outerRadius = min(self.width()/2, self.height()/2)
r = QtCore.QRect(1, 1, 100, 100) # <-- create rectangle
startAngle = 270 * 16 # <-- set start angle to draw arc
endAngle = -270 * 16 # <-- set end arc angle
painter.setPen(QPen(QtGui.QColor('#000000'), 3)) # self.lineWidth)) # <-- arc color
# painter.setBrush(QtCore.Qt.HorPattern)
painter.drawArc(r, startAngle, endAngle) # <-- draw arc
# arc prg
painter.save()
painter.setPen(QPen(QtGui.QColor('#ffffff'), 30))
painter.drawArc(r, startAngle, self._value * 16)
painter.restore()
painter.end()
super(cPrg, self).paintEvent(e)
class mainWindow(QtGui.QWidget):
def __init__(self):
super(mainWindow, self).__init__()
self.spdBar = cPrg(self)
self.initUi()
def initUi(self):
self.spdBar.setGeometry(10, 10, 500, 500)
self.spdBar.setValue(.5)
# self.hbox = QtGui.QHBoxLayout(self)
# self.hbox.addWidget(self.spdBar)
# self.showFullScreen()
self.setGeometry(100, 100, 800, 480)
self.setWindowTitle('Window Title')
# self.show()
# def close_app(self):
# sys.exit()
EDIT: with this code working:
rect = e.rect()
r = QtCore.QRect(rect)
size = r.size()
pos = r.center()
r.moveCenter( QtCore.QPoint(pos.x(), pos.y()) )
r.setSize(size*.9)
r.moveCenter(pos)
Upvotes: 0
Views: 1645
Reputation: 243897
You must change the following:
parent
to cPrg
r = QtCore.QRect(15, 15, 300, 300)
then setGeometry(rect)
must be bigger.My solution is:
import sys
from PyQt4 import QtCore, QtGui
class cPrg(QtGui.QWidget):
def __init__(self, parent=None):
super(cPrg, self).__init__(parent)
self.lineWidth = 0
self.setValue(0.0)
def setValue(self, val):
val = float(min(max(val, 0), 1))
self._value = -270 * val
self.update()
def setLineWidth(self, lineWidth):
self.lineWidth = lineWidth
def paintEvent(self, e):
painter = QtGui.QPainter(self)
painter.setRenderHint(painter.Antialiasing)
# outerRadius = min(self.width()/2, self.height()/2)
r = QtCore.QRect(15, 15, 300, 300) # <-- create rectangle
startAngle = 270 * 16 # <-- set start angle to draw arc
endAngle = -270 * 16 # <-- set end arc angle
painter.setPen(QtGui.QPen(QtGui.QColor('#000000'), 3)) # self.lineWidth)) # <-- arc color
# painter.setBrush(QtCore.Qt.HorPattern)
painter.drawArc(r, startAngle, endAngle) # <-- draw arc
# arc prg
painter.save()
painter.setPen(QtGui.QPen(QtGui.QColor('#ffffff'), 30))
painter.drawArc(r, startAngle, self._value * 16)
painter.restore()
painter.end()
super(cPrg, self).paintEvent(e)
class mainWindow(QtGui.QWidget):
def __init__(self):
super(mainWindow, self).__init__()
self.spdBar = cPrg(self)
self.initUi()
def initUi(self):
self.spdBar.setGeometry(10, 10, 300, 300)
self.spdBar.setValue(.5)
# self.showFullScreen()
self.setGeometry(100, 100, 800, 480)
self.setWindowTitle('Window Title')
def main():
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_X11InitThreads)
app = QtGui.QApplication(sys.argv)
gui = mainWindow()
gui.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Upvotes: 1