PyQt5 / PySide2 代码只执行 ascii 字符
PyQt5 / PySide2 code only executes works with ascii characters
我为名为 Nuke 的程序制作了一个脚本扩展,它使用 lineedit 打开一个对话框并允许用户输入标签。但是,当 lineedit 中只有 ascii 字符时,脚本仅通过按 enter 执行 setLabel()。
text()
returns unicode 和 Nuke 对标签中的特殊字符如 äöü 没有问题,如果你通过正常 ui
这是我的代码:
# -*- coding: utf-8 -*-
from PySide2 import QtCore, QtGui, QtWidgets
import nuke
import sys
import os
class setLabelTool(QtWidgets.QDialog):
def __init__(self, node):
self.n = node
super(setLabelTool, self).__init__()
self.setObjectName("Dialog")
self.setWindowTitle("Test")
self.setFixedSize(199, 43)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
self.lineEdit = QtWidgets.QLineEdit(self)
self.lineEdit.setGeometry(QtCore.QRect(10, 10, 181, 25))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit.setFocusPolicy(QtCore.Qt.StrongFocus)
self.lineEdit.setAlignment(QtCore.Qt.AlignHCenter)
currentlabel = self.n['label'].value()
if len(currentlabel) == 0:
self.lineEdit.setPlaceholderText("Set node label")
else:
self.lineEdit.setText(currentlabel)
self.lineEdit.selectAll()
self.lineEdit.returnPressed.connect(self.setLabel)
def setLabel(self):
label = self.lineEdit.text()
self.n['label'].setValue(label)
print ("Node: " + self.n['name'].value() + " labeled " + label)
self.close()
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Escape:
print "Exit setLabelTool"
self.close()
def showLabelTool():
n = nuke.selectedNodes()[-1]
if n != None:
Tool = setLabelTool(n)
Tool.exec_()
else:
print "Error in showLabelTool()"
我昨天遇到了同样的问题。
text() returns 类型的 unicode 和你的方法需要一个字符串对象,转换只需使用 encode('utf-8')
这可能有点断章取义,但是如果您想要完成的话,可以使用 getInput
更简单的方法来更改 Nuke 中节点的标签:
new_label = nuke.getInput("enter label")
nuke.selectedNode()['label'].setValue(new_label)
我为名为 Nuke 的程序制作了一个脚本扩展,它使用 lineedit 打开一个对话框并允许用户输入标签。但是,当 lineedit 中只有 ascii 字符时,脚本仅通过按 enter 执行 setLabel()。
text()
returns unicode 和 Nuke 对标签中的特殊字符如 äöü 没有问题,如果你通过正常 ui
这是我的代码:
# -*- coding: utf-8 -*-
from PySide2 import QtCore, QtGui, QtWidgets
import nuke
import sys
import os
class setLabelTool(QtWidgets.QDialog):
def __init__(self, node):
self.n = node
super(setLabelTool, self).__init__()
self.setObjectName("Dialog")
self.setWindowTitle("Test")
self.setFixedSize(199, 43)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
self.lineEdit = QtWidgets.QLineEdit(self)
self.lineEdit.setGeometry(QtCore.QRect(10, 10, 181, 25))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit.setFocusPolicy(QtCore.Qt.StrongFocus)
self.lineEdit.setAlignment(QtCore.Qt.AlignHCenter)
currentlabel = self.n['label'].value()
if len(currentlabel) == 0:
self.lineEdit.setPlaceholderText("Set node label")
else:
self.lineEdit.setText(currentlabel)
self.lineEdit.selectAll()
self.lineEdit.returnPressed.connect(self.setLabel)
def setLabel(self):
label = self.lineEdit.text()
self.n['label'].setValue(label)
print ("Node: " + self.n['name'].value() + " labeled " + label)
self.close()
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Escape:
print "Exit setLabelTool"
self.close()
def showLabelTool():
n = nuke.selectedNodes()[-1]
if n != None:
Tool = setLabelTool(n)
Tool.exec_()
else:
print "Error in showLabelTool()"
我昨天遇到了同样的问题。
text() returns 类型的 unicode 和你的方法需要一个字符串对象,转换只需使用 encode('utf-8')
这可能有点断章取义,但是如果您想要完成的话,可以使用 getInput
更简单的方法来更改 Nuke 中节点的标签:
new_label = nuke.getInput("enter label")
nuke.selectedNode()['label'].setValue(new_label)