Python-PyQt4 QTextEdit
Python-PyQt4 QTextEdit
大家好,我有一个问题,我必须编写 python 脚本,该脚本将首先显示带有按钮文本编辑和一些标签的 qt4 window。
我已链接的按钮,但是当我单击脚本末尾的左按钮时,它会显示:
Traceback (most recent call last):
File "Skrypt.py", line 18, in Koniec
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
TypeError: arguments did not match any overloaded call:
question(QWidget, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.Ok, defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton): argument 1 has unexpected type 'bool'
question(QWidget, str, str, int, button1: int = 0, button2: int = 0): argument 1 has unexpected type 'bool'
question(QWidget, str, str, str, button1Text: str = '', button2Text: str = '', defaultButtonNumber: int = 0, escapeButtonNumber: int = -1): argument 1 has unexpected type 'bool'
当我点击右侧时,这将是一个 pylab 脚本,它将从
文本编辑它显示这个:
File "Skrypt.py", line 26, in Zatwierdz
a = int(uiplot.textEdit())
TypeError: 'QTextEdit' object is not callable
我不知道如何解决这个问题,因为这是我第一次使用 qt4,所以如果有人能帮助我,我将不胜感激
这是脚本中的代码,它将使用 matplotlib
显示函数
import skrypt1
import pylab
import skrypt1
from pylab import *
import sys
from PyQt4 import QtGui, QtCore
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
def Koniec(self):
global wybor
wybor = QtGui.QMessageBox.question(self, 'Koniec',
"Na Pewno chcesz wyjsc ?",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
if wybor == QtGui.QMessageBox.Yes:
sys.exit()
else:
pass
def Zatwierdz(self):
x = pylab.arange(-10, 10.5, 0.5)
a = int(uiplot.textEdit())
y1 = [i / -3 + a for i in x if i <= 0]
y2 = [i**2 / 3 for i in x if i >= 0]
x1 = [i for i in x if i <= 0]
x2 = [i for i in x if i >= 0]
pylab.plot(x1, y1, x2, y2)
pylab.title('Wykres f(x)')
pylab.grid(True)
pylab.show()
gui_plot = skrypt1.QtGui.QMainWindow()
uiplot = skrypt1.Ui_MainWindow()
uiplot.setupUi(gui_plot)
uiplot.Zatwierdz.clicked.connect(Zatwierdz)
uiplot.Wyjscie.clicked.connect(Koniec)
gui_plot.show()
sys.exit(app.exec_())
下面是如何创建 window 的代码:
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(800, 600)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(50, 60, 361, 21))
self.label.setObjectName(_fromUtf8("label"))
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(50, 270, 361, 21))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.textEdit = QtGui.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(40, 360, 711, 71))
self.textEdit.setObjectName(_fromUtf8("textEdit"))
self.Zatwierdz = QtGui.QPushButton(self.centralwidget)
self.Zatwierdz.setGeometry(QtCore.QRect(560, 500, 200, 28))
self.Zatwierdz.setObjectName(_fromUtf8("Zatwierdz"))
self.Wyjscie = QtGui.QPushButton(self.centralwidget)
self.Wyjscie.setGeometry(QtCore.QRect(350, 500, 201, 28))
self.Wyjscie.setObjectName(_fromUtf8("Wyjscie"))
self.label_3 = QtGui.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(50, 160, 701, 31))
self.label_3.setObjectName(_fromUtf8("label_3"))
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.label.setText(_translate("MainWindow", "Funkcja Trygonometryczna", None))
self.label_2.setText(_translate("MainWindow", "Podaj wspolczynnik a: ", None))
self.Zatwierdz.setText(_translate("MainWindow", "Zatwierdz", None))
self.Wyjscie.setText(_translate("MainWindow", "Wyjscie", None))
self.label_3.setText(_translate("MainWindow", "Skrypt wyswietli wykres funkcji po wpisaniu wartosci ", None))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
您的代码存在以下错误:
点击信号有一个布尔值作为可选参数,指示按钮是否被选中(通常为 False,因为 属性 默认情况下处于禁用状态,在您的情况下你把函数的 self 作为第一个参数,这是不必要的。你混淆了 self 的使用,那种类型的属性在 classes 中使用,但你只有函数,所以没有必要声明该属性,而不是将自身传递给 QMessageBox
,您可以借助 lambda 函数传递 gui。
另一个错误是 textEdit
是 Ui_MainWindow
class 的成员,它不是函数或可调用的东西,所以你不应该使用括号,textEdit
是 class QTextEdit
的一个对象,所以如果你想获取文本,你必须使用它的方法 toPlainTex()
.
另一个错误是没有验证要转换成整数的值是否可以做,一个简单的解决方法是使用try和except。
不建议使用全局变量,因为很难监控它们的行为,所以如果你遇到由全局变量引起的问题,你将很难检测到它。
根据以上所有内容,我实施了以下解决方案:
import sys
from PyQt4 import QtGui, QtCore
import pylab
import skrypt1
def Koniec(gui):
wybor = QtGui.QMessageBox.question(gui, 'Koniec',
"Na Pewno chcesz wyjsc ?",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
if wybor == QtGui.QMessageBox.Yes:
sys.exit()
def Zatwierdz():
try:
x = pylab.arange(-10, 10.5, 0.5)
a = int(uiplot.textEdit.toPlainText())
y1 = [i / -3 + a for i in x if i <= 0]
y2 = [i**2 / 3 for i in x if i >= 0]
x1 = [i for i in x if i <= 0]
x2 = [i for i in x if i >= 0]
pylab.plot(x1, y1, x2, y2)
pylab.title('Wykres f(x)')
pylab.grid(True)
pylab.show(block=False)
except ValueError:
print("Error")
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
gui_plot = skrypt1.QtGui.QMainWindow()
uiplot = skrypt1.Ui_MainWindow()
uiplot.setupUi(gui_plot)
uiplot.Zatwierdz.clicked.connect(Zatwierdz)
uiplot.Wyjscie.clicked.connect(lambda checked, w=gui_plot:Koniec(gui_plot))
gui_plot.show()
sys.exit(app.exec_())
大家好,我有一个问题,我必须编写 python 脚本,该脚本将首先显示带有按钮文本编辑和一些标签的 qt4 window。 我已链接的按钮,但是当我单击脚本末尾的左按钮时,它会显示:
Traceback (most recent call last): File "Skrypt.py", line 18, in Koniec QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) TypeError: arguments did not match any overloaded call: question(QWidget, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.Ok, defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton): argument 1 has unexpected type 'bool' question(QWidget, str, str, int, button1: int = 0, button2: int = 0): argument 1 has unexpected type 'bool' question(QWidget, str, str, str, button1Text: str = '', button2Text: str = '', defaultButtonNumber: int = 0, escapeButtonNumber: int = -1): argument 1 has unexpected type 'bool'
当我点击右侧时,这将是一个 pylab 脚本,它将从 文本编辑它显示这个:
File "Skrypt.py", line 26, in Zatwierdz
a = int(uiplot.textEdit())
TypeError: 'QTextEdit' object is not callable
我不知道如何解决这个问题,因为这是我第一次使用 qt4,所以如果有人能帮助我,我将不胜感激
这是脚本中的代码,它将使用 matplotlib
显示函数import skrypt1
import pylab
import skrypt1
from pylab import *
import sys
from PyQt4 import QtGui, QtCore
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
def Koniec(self):
global wybor
wybor = QtGui.QMessageBox.question(self, 'Koniec',
"Na Pewno chcesz wyjsc ?",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
if wybor == QtGui.QMessageBox.Yes:
sys.exit()
else:
pass
def Zatwierdz(self):
x = pylab.arange(-10, 10.5, 0.5)
a = int(uiplot.textEdit())
y1 = [i / -3 + a for i in x if i <= 0]
y2 = [i**2 / 3 for i in x if i >= 0]
x1 = [i for i in x if i <= 0]
x2 = [i for i in x if i >= 0]
pylab.plot(x1, y1, x2, y2)
pylab.title('Wykres f(x)')
pylab.grid(True)
pylab.show()
gui_plot = skrypt1.QtGui.QMainWindow()
uiplot = skrypt1.Ui_MainWindow()
uiplot.setupUi(gui_plot)
uiplot.Zatwierdz.clicked.connect(Zatwierdz)
uiplot.Wyjscie.clicked.connect(Koniec)
gui_plot.show()
sys.exit(app.exec_())
下面是如何创建 window 的代码:
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(800, 600)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(50, 60, 361, 21))
self.label.setObjectName(_fromUtf8("label"))
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(50, 270, 361, 21))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.textEdit = QtGui.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(40, 360, 711, 71))
self.textEdit.setObjectName(_fromUtf8("textEdit"))
self.Zatwierdz = QtGui.QPushButton(self.centralwidget)
self.Zatwierdz.setGeometry(QtCore.QRect(560, 500, 200, 28))
self.Zatwierdz.setObjectName(_fromUtf8("Zatwierdz"))
self.Wyjscie = QtGui.QPushButton(self.centralwidget)
self.Wyjscie.setGeometry(QtCore.QRect(350, 500, 201, 28))
self.Wyjscie.setObjectName(_fromUtf8("Wyjscie"))
self.label_3 = QtGui.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(50, 160, 701, 31))
self.label_3.setObjectName(_fromUtf8("label_3"))
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.label.setText(_translate("MainWindow", "Funkcja Trygonometryczna", None))
self.label_2.setText(_translate("MainWindow", "Podaj wspolczynnik a: ", None))
self.Zatwierdz.setText(_translate("MainWindow", "Zatwierdz", None))
self.Wyjscie.setText(_translate("MainWindow", "Wyjscie", None))
self.label_3.setText(_translate("MainWindow", "Skrypt wyswietli wykres funkcji po wpisaniu wartosci ", None))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
您的代码存在以下错误:
点击信号有一个布尔值作为可选参数,指示按钮是否被选中(通常为 False,因为 属性 默认情况下处于禁用状态,在您的情况下你把函数的 self 作为第一个参数,这是不必要的。你混淆了 self 的使用,那种类型的属性在 classes 中使用,但你只有函数,所以没有必要声明该属性,而不是将自身传递给
QMessageBox
,您可以借助 lambda 函数传递 gui。另一个错误是
textEdit
是Ui_MainWindow
class 的成员,它不是函数或可调用的东西,所以你不应该使用括号,textEdit
是 classQTextEdit
的一个对象,所以如果你想获取文本,你必须使用它的方法toPlainTex()
.另一个错误是没有验证要转换成整数的值是否可以做,一个简单的解决方法是使用try和except。
不建议使用全局变量,因为很难监控它们的行为,所以如果你遇到由全局变量引起的问题,你将很难检测到它。
根据以上所有内容,我实施了以下解决方案:
import sys
from PyQt4 import QtGui, QtCore
import pylab
import skrypt1
def Koniec(gui):
wybor = QtGui.QMessageBox.question(gui, 'Koniec',
"Na Pewno chcesz wyjsc ?",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
if wybor == QtGui.QMessageBox.Yes:
sys.exit()
def Zatwierdz():
try:
x = pylab.arange(-10, 10.5, 0.5)
a = int(uiplot.textEdit.toPlainText())
y1 = [i / -3 + a for i in x if i <= 0]
y2 = [i**2 / 3 for i in x if i >= 0]
x1 = [i for i in x if i <= 0]
x2 = [i for i in x if i >= 0]
pylab.plot(x1, y1, x2, y2)
pylab.title('Wykres f(x)')
pylab.grid(True)
pylab.show(block=False)
except ValueError:
print("Error")
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
gui_plot = skrypt1.QtGui.QMainWindow()
uiplot = skrypt1.Ui_MainWindow()
uiplot.setupUi(gui_plot)
uiplot.Zatwierdz.clicked.connect(Zatwierdz)
uiplot.Wyjscie.clicked.connect(lambda checked, w=gui_plot:Koniec(gui_plot))
gui_plot.show()
sys.exit(app.exec_())