簡體   English   中英

Python-PyQt4 QTextEdit

[英]Python-PyQt4 QTextEdit

大家好,我有一個問題我必須編寫python腳本,該腳本將首先顯示帶有按鈕文本編輯和一些標簽的qt4窗口。 我已鏈接了按鈕,但是當我單擊腳本結尾的左按鈕時,它顯示以下內容:

追溯(最近一次通話):在Koniec QtGui.QMessageBox.Yes中的文件“ Skrypt.py”,第18行。 QtGui.QMessageBox.No)類型錯誤:參數與任何重載調用均不匹配:問題(QWidget,str,str,按鈕:Union [QMessageBox.StandardButtons,QMessageBox.StandardButton] = QMessageBox.Ok,defaultButton:QMessageBox.StandardButton = QMessageBox.NoButton ):參數1具有意外類型'bool'問題(QWidget,str,str,int,button1:int = 0,button2:int = 0):參數1具有意外類型'bool'問題(QWidget,str,str,str,str ,button1Text:str ='',button2Text:str ='',defaultButtonNumber:int = 0,escapeButtonNumber:int = -1):參數1具有意外類型'bool'

當我單擊右邊的那將是一個pylab腳本,該腳本將從文本編輯中獲取價值時顯示以下內容:

Zatwierdz中的文件“ Skrypt.py”,第26行
一個= int(uiplot.textEdit())
TypeError:“ QTextEdit”對象不可調用

我不知道如何解決這個問題,因為這是我第一次進入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_())

這是創建窗口的代碼:

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傳遞給QMessageBox還可以將gui與lambda函數的幫助。

  • 另一個錯誤是textEditUi_MainWindow類的成員,它不是函數或可調用的東西,因此您不應使用括號, textEditQTextEdit類的對象,因此,如果要獲取文本,則必須使用其toPlainTex()方法。

  • 另一個錯誤是不驗證是否可以完成將要轉換為整數的值,一個簡單的解決方案是使用try和except。

  • 不建議使用global,因為很難監視它們的行為,因此,如果您是由global變量引起的問題,則將很難檢測到它。

通過以上所有操作,我實現了以下解決方案:

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_())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM