2017-11-11 7 views
0

QComboBox currentIndexChangedユーザーから新しい項目が選択されると、信号が発射されません。しかし、コード内で.setCurrentIndexが使用されると起動します。 (ライン91および92)。Pyqt4 Qcombobox信号はユーザーの入力時に発射されませんが、.setCurrentIndexを使用すると発動しません

私はQTabWidgetを持っています。 tab1にQvboxがあり、そこに3つのQhboxが追加されています。各Qhb​​oxはKaskadeクラスからのもので、QComboboxとQstackedWidgetという2つのウィジェットを含んでいます。 QComboboxの現在のIndexに応じて、QstackWidgetはQLCD番号またはQspinboxを表示します。 ユーザーがGUIのQCombobox索引を変更した場合、QComboboxは新しい項目を表示しますが、currentIndexChangedシグナルは出されません。

私には何が欠けていますか?どんな種類の助けにも感謝します。

これは、あなたがタブ1、いないレイアウトにvboxKaskadeを追加する必要があります私のテストコード

# -*- coding: utf-8 -*- 

from PyQt4 import QtCore, QtGui 

import sys 



class Kaskade(QtGui.QWidget): 
    def __init__(self,sp,sp_min,sp_max, parent = None): 
     super(Kaskade, self).__init__(parent) 


     self._sp=sp 
     self._sp_min=sp_min 
     self._sp_max=sp_max 


     self.sp() 
     self.hbox_gen() 


    def mode_changed(self,i): 
     print "Mode has changed to", i 
     self.sp_stack.setCurrentIndex(i) 


    def sp(self): 
     self.sp_stack=QtGui.QStackedWidget(self) 
     self.sp1 = QtGui.QWidget() 
     self.sp2 = QtGui.QWidget() 

     self.sp1UI() 
     self.sp2UI() 

     self.sp_stack.addWidget(self.sp1) 
     self.sp_stack.addWidget(self.sp2) 

    def sp1UI(self): 
     self.sp1_layout=QtGui.QHBoxLayout() 
     self.sp1_lcd=QtGui.QLCDNumber(self) 
     self.sp1_layout.addWidget(self.sp1_lcd) 
     #self.sp1.connect(lcd_pv.display) 
     self.sp1.setLayout(self.sp1_layout) 

    def sp2UI(self): 
     self.sp2_layout=QtGui.QHBoxLayout() 
     self.sp2_spinBox=QtGui.QSpinBox() 
     self.sp2_spinBox.setRange(self._sp_min,self._sp_max) 
     self.sp2_spinBox.setValue(self._sp) 
     self.sp2_layout.addWidget(self.sp2_spinBox) 
     self.sp2.setLayout(self.sp2_layout) 


    def hbox_gen(self): 

     self.mode=QtGui.QComboBox(self) 
     self.mode.addItem("OFF") 
     self.mode.addItem("ON") 
     self.mode.currentIndexChanged.connect(self.mode_changed) 

     self.hbox = QtGui.QHBoxLayout() 
     self.hbox.addWidget(self.mode) 
     self.hbox.addWidget(self.sp_stack) 



class tabdemo(QtGui.QTabWidget): 
    def __init__(self, parent = None): 
     super(tabdemo, self).__init__(parent) 
     self.tab1 = QtGui.QWidget() 
     self.tab2 = QtGui.QWidget() 
     self.tab3 = QtGui.QWidget() 

     self.addTab(self.tab1,"Tab 1") 
     self.addTab(self.tab2,"Tab 2") 
     self.addTab(self.tab3,"Tab 3") 
     self.tab1UI() 
     self.tab2UI() 
     self.tab3UI() 
     self.setWindowTitle("Heizung") 


    def tab1UI(self): 


     K1=Kaskade(28,5,40) 
     K2=Kaskade(30,5,40) 
     K3=Kaskade(35,5,40) 

     K1.mode.setCurrentIndex(1) 
     K3.mode.setCurrentIndex(1) 

     vbox = QtGui.QVBoxLayout() 
     vbox.addLayout(K1.hbox) 
     vbox.addLayout(K2.hbox) 
     vbox.addLayout(K3.hbox) 
     self.tab1.setLayout(vbox) 

     self.setTabText(1,"Tab1") 

    def tab2UI(self): 
     self.setTabText(1,"Tab2") 


    def tab3UI(self): 
     self.setTabText(2,"Tab3") 








def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = tabdemo() 
    ex.show() 


    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

答えて

0

です。さらに、self.hboxのレイアウトをKaskadeとする必要があります。

class Kaskade(QtGui.QWidget): 
    [...] 
    def hbox_gen(self): 
     [...] 
     self.hbox = QtGui.QHBoxLayout(self) 
     [...] 


class tabdemo(QtGui.QTabWidget): 
    [...] 
    def tab1UI(self): 
     [...] 
     vbox = QtGui.QVBoxLayout() 
     vbox.addWidget(K1) 
     vbox.addWidget(K2) 
     vbox.addWidget(K3) 
     self.tab1.setLayout(vbox) 
     [...] 
+0

ありがとうございます。私は両方を試みた。 1st。 self.hbox = QtGui.QHBoxLayout()をself.hbox = QtGui.QHBoxLayout(self)に変更しました。その結果、GUIはもう表示されなくなりました。 – SteffenUM

+0

2番目。 vbox.addWidget(K1.hbox)をvbox.addWidget(K1)に変更しました。 TypeError ...予期しないType "Kaskade"を返します。だから問題はまだ解決されていません。 – SteffenUM

+0

@SteffenUM私はあなたが正しく変更していないと思います。次のリンクに完全なコードがあります:https://gist.github.com/eyllanesc/6c97968b3c5185b63873f9b10cceec99 – eyllanesc

関連する問題