2014-01-03 3 views
1

Как сделать праймер, щелкнув правой кнопкой мыши, изменилось ли значение на минимальное значение этого конкретного QSpinBox? Это должно работать для каждого счетчика в этом пользовательском интерфейсе. Таким образом, значение верхнего счетчика изменилось бы до 1 при нажатии правой кнопкой мыши, а значение нижнего праймера изменилось бы на 0, когда этот счетчик будет нажат правой кнопкой мыши.Сделать значение QSpinBox изменено на минимальное значение при щелчке правой кнопкой мыши Pyside + Python

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 
import math 
from PySide import QtGui, QtCore 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.initUI() 

    def initUI(self): 

     #ESTIMATED TOTAL RENDER TIME 
     self.spinFrameCountA = QtGui.QSpinBox() 
     self.spinFrameCountA.setRange(1,999999) 
     self.spinFrameCountA.setValue(40) 

     self.spinFrameCountB = QtGui.QSpinBox() 
     self.spinFrameCountB.setRange(0,999999) 
     self.spinFrameCountB.setValue(6) 

     # UI LAYOUT 
     grid = QtGui.QGridLayout() 
     grid.setSpacing(0) 
     grid.addWidget(self.spinFrameCountA, 0, 0, 1, 1) 
     grid.addWidget(self.spinFrameCountB, 1, 0, 1, 1) 
     self.setLayout(grid) 

     self.setGeometry(800, 400, 100, 50) 
     self.setWindowTitle('Render Time Calculator') 
     self.show() 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 
+0

Что должно произойти в контекстное меню, которое обычно показываются правой кнопкой мыши? – ekhumoro

+0

Это не показалось бы, я полагаю. Может быть, только когда пользователи нажимают на кнопки на прядильщике. Не поле ввода. – JokerMartini

+0

Что можно добавить в контекстное меню элемент «clear/reset»? Таким образом, он также будет доступен с клавиатуры. – ekhumoro

ответ

2

Вот как добавить пункт в контекстное меню по умолчанию, которые должны делать то, что вы хотите:

... 
    self.spinFrameCountA = QtGui.QSpinBox() 
    self.spinFrameCountA.setRange(1,999999) 
    self.spinFrameCountA.setValue(40) 
    self.spinFrameCountA.installEventFilter(self) 

    self.spinFrameCountB = QtGui.QSpinBox() 
    self.spinFrameCountB.setRange(0,999999) 
    self.spinFrameCountB.setValue(6) 
    self.spinFrameCountB.installEventFilter(self) 
    ... 

def eventFilter(self, widget, event): 
    if (event.type() == QtCore.QEvent.ContextMenu and 
     isinstance(widget, QtGui.QSpinBox)): 
     menu = widget.lineEdit().createStandardContextMenu() 
     menu.addSeparator() 
     menu.addAction('Reset Value', 
         lambda: widget.setValue(widget.minimum())) 
     menu.exec_(event.globalPos()) 
     menu.deleteLater() 
     return True 
    return QtGui.QWidget.eventFilter(self, widget, event)