python-3.x - PyQt - 结合 QSlider 和 QTextEdit
问题描述
我正在尝试创建一个QSlider
-QTextEdit
同步对,这样一个中的任何更改都会反映在另一个中。这是我的代码:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class MainWindow(QMainWindow):
def __init__(self, *args, **kw):
super().__init__(*args, **kw)
self.main_panel = QWidget(self)
self.setCentralWidget(self.main_panel)
grid = QGridLayout(self.main_panel)
self.sl = QSlider(Qt.Horizontal, self)
self.txt = QTextEdit(self)
self._old_val = ""
self.sl.valueChanged.connect(self._sl_to_txt)
self.txt.textChanged.connect(self._txt_to_sl)
self.sl.setMinimum(1)
self.sl.setMaximum(60)
self.sl.setValue(30)
grid.addWidget(self.sl, 0, 0)
grid.addWidget(self.txt, 0, 1)
def _sl_to_txt(self, val):
print("SL->TXT")
self.txt.setText(str(val))
def _txt_to_sl(self):
print("TXT->SL")
val = self.txt.toPlainText()
try:
self.sl.setValue(int(val))
self._old_val = val
except ValueError:
self.txt.setText(self._old_val)
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
但是,这会导致两个信号同时发出(由于setValue
并setText
触发了各自的信号),并且由于某种原因,在尝试输入文本区域时,光标会一直放在文本区域的开头。
如何在不触发相应信号的情况下更改文本/滑块值?
解决方案
推荐阅读
- ruby - mysql_client 在 ubuntu 18.04 上安装 Chef 12.13.37 失败
- xmlhttprequest - 如何使用 postman 对 express.js 的 http 请求启用 xhr
- awk - 使用 awk 在列中打印部分匹配
- python - 使用 pyenv 创建隔离的 Jupyter ipython 内核:找不到模块 ipykernel_launcher
- javascript - 没有使用 mapStateToProps 将 Redux 状态更新到 React 组件
- python - Opencv imshow相机在线程中第二次无法工作
- javascript - 仅使用 css 反转 forEach(在 .php 文件中)语句中的引导行
- google-apps-script - GridValidationBuilder 的自定义验证函数
- c - 为什么这个结构在编译时是未知的?
- excel - 在excel VBA中通过数组(或任何其他合适的选项)比较两列中的值组合的最快方法