我怎样才能让行动现在只被检查?

时间:2015-07-20 04:48:28

标签: python pyqt

我在popmenu中创建了pushButton_6 popmenu有三个动作,每个动作只能收音机 该动作用于调整播放歌曲的方式 我有一个问题,即触发动作会被记住。

例如,
这首歌的名单是:ABCDEFG,现在正在播放A 当我在随机动作之前点击有序动作时。
歌曲首先是有序的(歌曲B),然后是随机的(现在假设随机到E) 所以播放歌曲E。
但我希望这首歌只是随机播放,因为它现在已被转换为随机状态。

另一个例子,
当我点击有序动作,然后随机动作,最后通过有序动作 这首歌首先是有序的(歌曲B),然后是随机的(假设现在随机到E),最后是有序的。(歌曲F)
但我希望这首歌只是按顺序播放,因为它现在已被转换为有序的状态 所以这首歌应该扮演B而不是F。

我怎样才能让行动现在只被检查?
顺便说一句,popmenu可以出现吗?

这是popmenu的代码。

        popmenu = QtGui.QMenu(self.ui.pushButton_6)
        group = QtGui.QActionGroup(self.ui.pushButton_6)
        group.setExclusive(True)

        for i in range(1, 4):
            if i==1:
                action = group.addAction('ordered')
                action.setCheckable(True)
                #action.setChecked(True) 

            if i==2:
                action = group.addAction('replay')
                action.setCheckable(True)

            if i==3:
                action = group.addAction('random')
                action.setCheckable(True)


            popmenu.addAction(action)
        self.ui.pushButton_6.setMenu(popmenu)
        group.triggered.connect(self.sortedEvent) 

这是sortedEvent的代码。

def sortedEvent(self,action):       
        if action.text()=="ordered":
            print(action.text())                                    
            self.connect(self.mediaObject,QtCore.SIGNAL('finished()'),self.ordered)

        if action.text()=="replay":
            print(action.text())               
            self.connect(self.mediaObject,QtCore.SIGNAL('aboutToFinish()'),self.replay)

        if action.text()=="random":
            print(action.text())                
            self.connect(self.mediaObject,QtCore.SIGNAL('finished()'),self.random)

1 个答案:

答案 0 :(得分:0)

connect是附加的,它们不会互相替换。使用您的代码,如果我点击“已订购”然后“随机”,finished信号将连接到两个广告位:self.orderedself.random。我不认为这是你期望的行为。

相反,您可以拥有string值,我们称之为whatToDoNext。单击菜单将字符串设置为操作的文本:

def sortedEvent(self,action):       
    self.whatToDoNext=action.text()

在您的情况下,whatToDoNext可以“订购”,“随机”或“重播” finished的{​​{1}}信号始终连接到同一个函数:

mediaObject