[英]python script stops at import statement when script is run as cronjob
[英]Python script stops running when I import a GUI python script
我有一个 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。
我冒昧地猜测您的 GUI 脚本正在调用.mainloop()
或一些等效的并进入阻塞循环。 这只是猜测,尽管您没有发布任何相关代码......假设这是问题,您也许可以通过线程或多处理来规避它。
尝试一下:
主文件
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_())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.