2016-12-18 22 views
0

私の問題は、インポートされたウィジェットに対してself.spdBar.setGeometryが機能しないことです。ここカスタムQWidget:setGeometryが機能しない

はmain.pyコードです:

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) 

私の推測paintEvent機能で何か間違っている:ここ

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() 

は、カスタムウィジェットPYファイルです。

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() 

OUTPUT

EDIT:このコード作業と :

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) 

答えて

1

次を変更する必要があります。

  • を追加します。〜cPrg
  • r = QtCore.QRect(15, 15, 300, 300)の場合は、setGeometry(rect)がより大きくなければなりません。

私のソリューションは、次のとおりです。

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() 

enter image description here

+0

私はあなたが示した何をしたが、それでも私のために働いていない... –

+0

、私にあなたの更新されたコード – eyllanesc

+0

削除self.showを表示してください() def close_app(self): sys.exit() – eyllanesc

関連する問題