私は、タブウィジェットで多くのタブを作成するために使用するカスタムウィジェットを持っています。このカスタムウィジェットでは、メッセージを送信するボタンがあります。このボタンは、このような信号に接続されている:送信スレッドでPyQt:スロットが何度も実行される
QtCore.QObject.emit(
signal_mapper,
QtCore.SIGNAL("send_message"),
message)
:私は、データをフェッチし、私はこのようなメッセージを送信するスレッドに信号を発するsending_message
方法で
signal_mapper = QtCore.QSignalMapper()
self.send_btn.clicked.connect(self.sending_message)
QtCore.QObject.connect(
signal_mapper,
QtCore.SIGNAL("send_message"),
self.send_message
)
問題は、私は多くのタブを持っていると私は「1」のメッセージを送信するときに、私はそれが、タブの数が(*メッセージを作成し送信することを見つけたときである(スロットは受信)例えば、私は3つのタブにそれを持っている場合3つのメッセージを送信する)。
EDIT:
だから、これはコードの断片である:ここ
class Main(QtGui.QMainWindow):
def __init__(self, user, user_lst, icon, connexion):
super(Main, self).__init__()
self.user_name = user
self.user_lst = user_lst
self.icon = icon
self.connexion = connexion
...
self.show()
def init_ui(self):
...
self.send_btn.clicked.connect(self.sending_message)
...
self.chat_widget=ChatForm(self.user_name,self.user_lst,self.icon,self.connexion)
self.tab_widget.addTab(self.chat_widget, self.my_actions.send_file_icon, "topic 1")
def new_tab(self):
chat_widget = ChatForm(self.user_name, self.user_lst, self.icon, self.connexion)
self.tab_widget.insertTab(self.i, chat_widget, "topic")
def sending_message(self):
txt = str(self.line_edit.text())
if txt != "":
QtCore.QObject.emit(
signal_mapper,
QtCore.SIGNAL("send_message"),
txt)
がスレッド送っている:だから
class SendingThread(QtCore.QThread):
def __init__(self, client_sock):
super(SendingThread, self).__init__()
self.client_socket = client_sock
def run(self):
# waiting user to send a message
QtCore.QObject.connect(
signal_mapper,
QtCore.SIGNAL("send_message"),
self.send_message, QtCore.Qt.UniqueConnection
)
def send_message(self, message):
print("the message as sent", message)
self.client_socket.send_msg(message)
QTabWidgetのすべてのタブでこの信号を初期化して、共通のスロットに接続していますか? 共通のスロット( 'self.parent()。do_something()')に接続するのではなく、スロットとしてインスタンスメソッドに接続すると、 'if self。 isVisible():self.parent()。do_something() ' この方法では、現在表示されているタブからのみ表示されます。 –
私はpyqtの初心者です。pleaeは具体的な例を教えていただけますか –
ごくわずかな質問)。 'send_btn'は' MainWindow'で定義されていて、個々のタブでは定義されていませんか?それは不思議です、私はそれがどのように振る舞うかわからない、それは、それぞれ、新しいタブに改宗するべきです。 –