将自定义 pyqtsignal 从一个主 window 发送到另一个
Sending a custom pyqtsignal from one main window to another
初学者 python 这里是编码员。我在 qt 设计器中创建了两个主要 windows。在第一个 window 中,我有一个包含三个项目的组合框 (cb) 和一个按钮 (Button1),在另一个 window 中,我有一个 LineEdit(edit)。当我按下第一个 window 中的按钮时,我想在我在第二个主要 window.[=12 中创建的 LineEdit 中显示文本(在组合框中选择的当前项目) =]
我在网上关注了几个例子,但我似乎找不到适合我的东西。所有示例都是通过在代码中构建 windows 来完成的(与 Qt 设计器相反)。在 Qt designer 上设计 windows 的人似乎和我有同样的问题。
如果有人能告诉我如何使用 Qt 设计器中设计的 windows 发送信号,我将不胜感激。这将真正解决我目前遇到的一个大瓶颈,我可以在我的代码的其他领域实施相同的策略。
import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi
class First_Window(QMainWindow):
got_signal = pyqtSignal(str)
def __init__(self):
super(First_Window,self).__init__()
loadUi('first_window.ui',self)
self.setWindowTitle('First Window')
self.Button1.clicked.connect(self.On_buttonclick_clicked)
def On_buttonclick_clicked(self):
self.got_signal.emit(self.cb.currentText())
class Second_Window(QMainWindow):
def __init__(self):
super(Second_Window, self).__init__()
loadUi('second_window.ui', self)
self.setWindowTitle('Second Window')
self.dcc = First_Window()
self.dcc.got_signal.connect(self.show_it)
def show_it(self, the_signal):
self.edit.setText(the_signal)
print(the_signal)
if __name__ == "__main__":
app = QApplication(sys.argv)
fw = First_Window()
fw.show()
sw = Second_Window()
sw.show()
sys.exit(app.exec_())
此代码是我正在处理的代码的简化版本,但它们存在相同的问题。
解释:
主要问题是你创建了2个First_Window:
- 你用来展示的,
- 另一个你在 got_signal 和 show_it 之间建立联系的地方。
解决方案:
只需创建一个显示的 First_Window 并建立连接:
import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi
class First_Window(QMainWindow):
got_signal = pyqtSignal(str)
def __init__(self):
super(First_Window, self).__init__()
loadUi("first_window.ui", self)
self.setWindowTitle("First Window")
self.Button1.clicked.connect(self.On_buttonclick_clicked)
def On_buttonclick_clicked(self):
self.got_signal.emit(self.cb.currentText())
class Second_Window(QMainWindow):
def __init__(self):
super(Second_Window, self).__init__()
loadUi("second_window.ui", self)
self.setWindowTitle("Second Window")
def show_it(self, the_signal):
self.edit.setText(the_signal)
print(the_signal)
if __name__ == "__main__":
app = QApplication(sys.argv)
fw = First_Window()
fw.show()
sw = Second_Window()
sw.show()
fw.got_signal.connect(sw.show_it)
sys.exit(app.exec_())
初学者 python 这里是编码员。我在 qt 设计器中创建了两个主要 windows。在第一个 window 中,我有一个包含三个项目的组合框 (cb) 和一个按钮 (Button1),在另一个 window 中,我有一个 LineEdit(edit)。当我按下第一个 window 中的按钮时,我想在我在第二个主要 window.[=12 中创建的 LineEdit 中显示文本(在组合框中选择的当前项目) =]
我在网上关注了几个例子,但我似乎找不到适合我的东西。所有示例都是通过在代码中构建 windows 来完成的(与 Qt 设计器相反)。在 Qt designer 上设计 windows 的人似乎和我有同样的问题。
如果有人能告诉我如何使用 Qt 设计器中设计的 windows 发送信号,我将不胜感激。这将真正解决我目前遇到的一个大瓶颈,我可以在我的代码的其他领域实施相同的策略。
import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi
class First_Window(QMainWindow):
got_signal = pyqtSignal(str)
def __init__(self):
super(First_Window,self).__init__()
loadUi('first_window.ui',self)
self.setWindowTitle('First Window')
self.Button1.clicked.connect(self.On_buttonclick_clicked)
def On_buttonclick_clicked(self):
self.got_signal.emit(self.cb.currentText())
class Second_Window(QMainWindow):
def __init__(self):
super(Second_Window, self).__init__()
loadUi('second_window.ui', self)
self.setWindowTitle('Second Window')
self.dcc = First_Window()
self.dcc.got_signal.connect(self.show_it)
def show_it(self, the_signal):
self.edit.setText(the_signal)
print(the_signal)
if __name__ == "__main__":
app = QApplication(sys.argv)
fw = First_Window()
fw.show()
sw = Second_Window()
sw.show()
sys.exit(app.exec_())
此代码是我正在处理的代码的简化版本,但它们存在相同的问题。
解释:
主要问题是你创建了2个First_Window:
- 你用来展示的,
- 另一个你在 got_signal 和 show_it 之间建立联系的地方。
解决方案:
只需创建一个显示的 First_Window 并建立连接:
import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi
class First_Window(QMainWindow):
got_signal = pyqtSignal(str)
def __init__(self):
super(First_Window, self).__init__()
loadUi("first_window.ui", self)
self.setWindowTitle("First Window")
self.Button1.clicked.connect(self.On_buttonclick_clicked)
def On_buttonclick_clicked(self):
self.got_signal.emit(self.cb.currentText())
class Second_Window(QMainWindow):
def __init__(self):
super(Second_Window, self).__init__()
loadUi("second_window.ui", self)
self.setWindowTitle("Second Window")
def show_it(self, the_signal):
self.edit.setText(the_signal)
print(the_signal)
if __name__ == "__main__":
app = QApplication(sys.argv)
fw = First_Window()
fw.show()
sw = Second_Window()
sw.show()
fw.got_signal.connect(sw.show_it)
sys.exit(app.exec_())