我有一个PyQt5脚本,该脚本创建了一个包含滑块的窗口。我希望在主要python脚本中使用此滑块的值,但是当它运行时,GUI脚本会连续运行,而主要python脚本根本不会运行。
我已经在GUI python脚本中创建了一个简单的滑块,然后将此脚本导入到主python文件中。
我的GUI python文件是:
import sys
from PyQt5.QtWidgets import (QLineEdit, QSlider, QPushButton,
QVBoxLayout, QApplication, QWidget)
from PyQt5.QtCore import Qt
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.init_ui()
def init_ui(self):
self.s1 = QSlider(Qt.Horizontal)
self.s1.setMinimum(1)
self.s1.setMaximum(100)
self.s1.setValue(25)
self.b1 = QPushButton('Run')
v_box = QVBoxLayout()
v_box.addWidget(self.s1)
v_box.addWidget(self.b1)
self.setLayout(v_box)
self.b1.clicked.connect(self.run_script)
self.show()
def run_script(self):
return self.s1.value()
app = QApplication(sys.argv)
a_window = Window()
sys.exit(app.exec_())
然后,我想从滑块中获取值并在我的主要python脚本中使用,其简化版本为:
from gui_script.py import *
value = 10 + self.s1.value()
print(value)
由此我得到滑块值,但是10并未添加到滑块值,这意味着主python文件未运行。输入滑块值后,如何使主python文件正确运行?
如果将滑块值设置为10,我希望该值为20。
答案 0 :(得分:0)
我冒昧地猜测您的GUI脚本正在调用.mainloop()
或某些等效命令并进入阻塞循环。这只是猜测,尽管您无需发布任何相关代码...假设这是问题所在,您也许可以通过线程或多处理来规避它。
答案 1 :(得分:0)
尝试一下:
main.py
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
# from gui_script.py import * # ---
from gui_script import Slider # +++
class Window(QWidget):
def __init__(self):
super().__init__()
self.slider = Slider() # +++
self.slider.s1.valueChanged[int].connect(self.changeValue)
self.spinBox = QSpinBox(self)
self.spinBox.setMinimum(1)
self.spinBox.setMaximum(100)
self.spinBox.setValue(25)
self.spinBox.valueChanged.connect(self.valueChangedSpin)
lay = QVBoxLayout(self)
lay.addWidget(self.slider)
lay.addWidget(self.spinBox)
def valueChangedSpin(self, i):
self.slider.s1.setValue(i)
def changeValue(self, value):
self.spinBox.setValue(value)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainwindow = Window()
mainwindow.show()
sys.exit(app.exec_())
gui_script.py
import sys
from PyQt5.QtWidgets import (QLineEdit, QSlider, QPushButton,
QVBoxLayout, QApplication, QWidget, QLabel)
from PyQt5.QtCore import Qt
class Slider(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.label = QLabel("25")
self.s1 = QSlider(Qt.Horizontal)
self.s1.setMinimum(1)
self.s1.setMaximum(100)
self.s1.setValue(25)
self.s1.valueChanged[int].connect(self.changeValue)
self.b1 = QPushButton('Run')
self.b1.clicked.connect(self.run_script)
self.v_box = QVBoxLayout()
self.v_box.addWidget(self.label)
self.v_box.addWidget(self.s1)
self.v_box.addWidget(self.b1)
self.setLayout(self.v_box)
def run_script(self):
# return self.s1.value()
print(self.s1.value())
def changeValue(self, value):
self.label.setNum(value)
if __name__ == '__main__': # !!!
app = QApplication(sys.argv)
a_window = Slider()
a_window.show()
sys.exit(app.exec_())