从 QLineEdit 中读取文本作为 Qmenu 选项的子菜单
reading text from QLineEdit as a submenu of a Qmenu option
正在读取作为 Qmenu 一部分的 QlineEdit 文本
正如最初代码中所示,虽然我可以使用触发函数来确定更改了哪个选项,然后阅读文本。如果我能弄清楚如何从子菜单中使用 currenttext() 读取 QlineEdit,我就可以检查用户是否在需要时更改了输入。
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QActionGroup, QMenu, QApplication, QLineEdit, QWidgetAction
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.menubar = self.menuBar()
self.menubar.installEventFilter(self)
self.fileMenu = self.menubar.addMenu('&Circuit Set-Up')
self.populate()
self.setGeometry(300, 300, 300, 200)
self.show()
def triggered(self, action):
print(action.text())
def populate(self):
for m in range(3):
setattr(self,'impMenu'+str(m),QMenu('Channel'+str(m), self))
factors=['Enter Transducer Calibration Constant [default 1] = 1',
'Enter Gauge Factor [default 2] = 2',
'Passion Ratio [default 0.3] = 0.3']
for n in range(3):
ql = QLineEdit(factors[n])
ql.setMinimumWidth(350)
wAction = QWidgetAction(self)
wAction.setDefaultWidget(ql)
getattr(self,'impMenu'+str(m)).addAction(wAction)
self.fileMenu.addMenu(getattr(self,'impMenu'+str(m)))
setattr(self,'triggered'+str(m),self.triggered)
getattr(self,'impMenu'+str(m)).triggered.connect(getattr(self,'triggered'+str(m)))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
QLineEdit 位于菜单上方,如果用户更改了文本,它不会通知您,因此使用 QMenu/QAction 中的信息是没有效率的。如果您想在用户更改文本时获取文本,请使用 QLineEdit 信号。
import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QAction, QApplication, QLineEdit, QMainWindow, QMenu, QWidgetAction
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.menubar = self.menuBar()
self.menubar.installEventFilter(self)
self.fileMenu = self.menubar.addMenu("&Circuit Set-Up")
self.populate()
self.setGeometry(300, 300, 300, 200)
self.show()
@pyqtSlot(str)
def onTextChanged(self, text):
print(text)
def populate(self):
factors = [
"Enter Transducer Calibration Constant [default 1] = 1",
"Enter Gauge Factor [default 2] = 2",
"Passion Ratio [default 0.3] = 0.3",
]
for m in range(3):
menu = QMenu("Channel{}".format(m), self)
self.fileMenu.addMenu(menu)
for n in range(3):
ql = QLineEdit(factors[n])
ql.setMinimumWidth(350)
ql.textChanged.connect(self.onTextChanged)
wAction = QWidgetAction(self)
wAction.setDefaultWidget(ql)
menu.addAction(wAction)
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
正在读取作为 Qmenu 一部分的 QlineEdit 文本
正如最初代码中所示,虽然我可以使用触发函数来确定更改了哪个选项,然后阅读文本。如果我能弄清楚如何从子菜单中使用 currenttext() 读取 QlineEdit,我就可以检查用户是否在需要时更改了输入。
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, QActionGroup, QMenu, QApplication, QLineEdit, QWidgetAction
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.menubar = self.menuBar()
self.menubar.installEventFilter(self)
self.fileMenu = self.menubar.addMenu('&Circuit Set-Up')
self.populate()
self.setGeometry(300, 300, 300, 200)
self.show()
def triggered(self, action):
print(action.text())
def populate(self):
for m in range(3):
setattr(self,'impMenu'+str(m),QMenu('Channel'+str(m), self))
factors=['Enter Transducer Calibration Constant [default 1] = 1',
'Enter Gauge Factor [default 2] = 2',
'Passion Ratio [default 0.3] = 0.3']
for n in range(3):
ql = QLineEdit(factors[n])
ql.setMinimumWidth(350)
wAction = QWidgetAction(self)
wAction.setDefaultWidget(ql)
getattr(self,'impMenu'+str(m)).addAction(wAction)
self.fileMenu.addMenu(getattr(self,'impMenu'+str(m)))
setattr(self,'triggered'+str(m),self.triggered)
getattr(self,'impMenu'+str(m)).triggered.connect(getattr(self,'triggered'+str(m)))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
QLineEdit 位于菜单上方,如果用户更改了文本,它不会通知您,因此使用 QMenu/QAction 中的信息是没有效率的。如果您想在用户更改文本时获取文本,请使用 QLineEdit 信号。
import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QAction, QApplication, QLineEdit, QMainWindow, QMenu, QWidgetAction
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.menubar = self.menuBar()
self.menubar.installEventFilter(self)
self.fileMenu = self.menubar.addMenu("&Circuit Set-Up")
self.populate()
self.setGeometry(300, 300, 300, 200)
self.show()
@pyqtSlot(str)
def onTextChanged(self, text):
print(text)
def populate(self):
factors = [
"Enter Transducer Calibration Constant [default 1] = 1",
"Enter Gauge Factor [default 2] = 2",
"Passion Ratio [default 0.3] = 0.3",
]
for m in range(3):
menu = QMenu("Channel{}".format(m), self)
self.fileMenu.addMenu(menu)
for n in range(3):
ql = QLineEdit(factors[n])
ql.setMinimumWidth(350)
ql.textChanged.connect(self.onTextChanged)
wAction = QWidgetAction(self)
wAction.setDefaultWidget(ql)
menu.addAction(wAction)
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())