2012-04-27 12 views
0

私は2つの問題と完全にこだわっている:PyQtは - QSliderとQGraphicsTextItemについての質問

1)私は(彼らはフロート〜0.5だいくつかの値を設定するQSliderを使用していますので、私が使用している* 1000年) 。 SingleStepとPageStepはキーボード入力とマウスホイールでうまく動作しますが、すべてのティックは設定されています...しかし、マウスを使ってスライダをドラッグすると、それらのティックやステップなどはすべて無視されます。 1つのティックを別のものにする。

self.ui.x_coord.setMaximum(l_d*1000) 
self.ui.x_coord.setSingleStep(l_d/N*1000) 
self.ui.x_coord.setTickInterval(l_d/N*1000) 
self.ui.x_coord.setTickPosition(QtGui.QSlider.TicksBothSides) 
self.ui.x_coord.setPageStep(l_d/N * 10000) 

(多分setMouseStepのようになめらか)ここに私のコードで行方不明何かありますか? QSliderの接続機能に

self.graph = BPlot(self.ui) 
self.ui.x_coord.valueChanged.connect(self.setCoordLabelValue) 

.... 

def setCoordLabelValue(self): 
    x = self.ui.x_coord.value()/1000 
    y = self.ui.y_coord.value()/1000 
    self.graph.setCoordText(x,y) 

.... 

class BPlot(QtGui.QGraphicsView): 
    def __init__(self, ui, parent=None): 
     super(BPlot, self).__init__(parent) 
     self.scene = QtGui.QGraphicsScene() 
     self.ui = ui 

     self.coordText = QtGui.QGraphicsTextItem(None, self.scene) 
     self.coordText.setPlainText("123") 

     self.x_offset = 40 
     self.y_offset = 20 

     self.currentPoint = QtGui.QGraphicsRectItem(None, self.scene) 
     self.cph = 4 
      self.cpw = 4 

    def resizeEvent(self, event): 
     size = event.size() 

    def showEvent(self, event): 
     aw = self.viewport().width() 
     ah = self.viewport().height() 
     self.scene.setSceneRect(0,0,aw,ah) 
     self.setScene(self.scene) 

     self.axis_pen = QtGui.QPen(QtCore.Qt.DashDotLine) 
     self.scene.addLine(0, 3/4*ah, aw, 3/4*ah, self.axis_pen) 

     self.normal_pen = QtGui.QPen(QtCore.Qt.SolidLine) 
     self.scene.addLine(self.x_offset, 3/4*ah - self.y_offset, aw - self.x_offset, 3/4*ah - self.y_offset) 
     self.currentPoint.setRect(self.x_offset - self.cpw/2, 3/4*ah - self.y_offset - self.cph/2, self.cpw, self.cph) 


    def setCoordText(self, x, y): 
     self.coordText.setPlainText(str(x) + ":" + str(y)) 

は問題がsetCoordTextのfuncがcoordTextを再描画しないことであることを

2)。 print(coordText.toPlainText())を使用する場合は正しい出力が得られますが、画面上に__init__の "123"が残っています

私はすでにself.scene.update )を運行なしでsetCoordTextの最後に追加します。

答えて

0

Ugh ...解決済み。ロジック、私の親愛なる友人はどこですか?

def setCoordLabelValue(self): 
    x = self.ui.x_coord.value()/1000 
    y = self.ui.y_coord.value()/1000 
    self.graph.setCoordText(x,y) 
    self.graph.invalidateScene() 

....... 

def paintEvent(self, event): 
     painter = QtGui.QPainter(self.viewport()) 

     # set color and width of line drawing pen 
     painter.setPen(QtGui.QPen(QtCore.Qt.black, 2)) 

     # drawLine(x1, y1, x2, y2) from point (x1,y1) to (x2,y2) 
     # draw the baseline 
     painter.drawText(10,20,str(x_coord)) 
     # set up color and width of the bars 
     width = 20 
     painter.setPen(QtGui.QPen(QtCore.Qt.red, width)) 
     delta = width + 5 
     x = 30 
     painter.end() 

     self.viewport().update() 
関連する問題