我正在使用PyQt4来设计我的Python程序的界面。现在我想在QTextEdit中打印一些名为“answere”的内容,但它不会打印任何内容。我测试了文本是否存在(参见print(n_text)
),它是。
程序的简短概述:将输入一个问题,程序应该回答它。
以下是代码:
# -*- coding: utf-8 -*-
import sys
import database
from PyQt4 import QtCore, QtGui, uic
class RasPi(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.ui = uic.loadUi('main_window.ui')
self.ui.setWindowTitle('Fragen an den Raspi')
self.ui.show()
self.connect(self.ui.ask, QtCore.SIGNAL("clicked()"), self.reading)
def reading(self):
txt = str(self.ui.question.text()).lower()
database.Base().searching(txt)
def answere(self, text):
n_text = QtCore.QString(text)
print(n_text)
self.ui.answere.append(n_text)
if __name__=='__main__':
app = QtGui.QApplication(sys.argv)
raspi=RasPi()
sys.exit(app.exec_())
修改
这是名为Database.py的第二个类。
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui, uic
import raspi
class Base(object):
def searching(self, txt):
if txt == '':
n_txt = "Du hast keine Frage gestellt"
else:
if txt == ("modell"):
n_txt = "Bei mir handelt es sich um einen Raspberry Pi B, im allgemeinen werde ich aber auch RasPi B genannt."
elif txt == ("hardware"):
n_txt = "CPU: ARM1176JZF-S\nArbeitsspeicher: 512MB\nGPU: Broadcom Dual Core VideoCore IV, OpenGL-ES 1.1/2.0, Full HD 1080p30\nAudio: HDMI (digital); 3,5-mm-Klinkenstecker (analog)\nNetzwerk: 10/100-MBit-Ethernet\nStromversorgung: 5V;Micro-USB-Anschluss (Micro-USB-B)\nSonstiges: 2x USB"
elif txt == ("software"):
n_txt = "Ich laufe auf einer Abwandlung von GNU/Linux."
elif txt == ("passwort"):
n_txt = "Warum sollte ich dir mein Passwort verraten?\nDas Standart-Passwort ist allerdings raspberry."
elif txt == ("start"):
n_txt = "Um das Userinterface zu starten, gib einfach im Terminal startx ein. Ansonsten kann man natürlich auch den Terminal selbst benutzen"
elif txt == ("daten") or txt == "gewicht":
n_txt = "Meine Größe beträgt 93x63,5x20. Mit diesen Abmessungen passe ich sogar in einen Geldbeutel\nIch wiege auch nur 40 Gramm."
elif txt == "konkurenz" or txt == "alternative":
n_txt = "Es gibt noch den Banana Pi, das Pandaboard, das Cubieboard und viele mehr."
elif txt == "geschichte" or txt == "lebenslauf":
n_txt = "Der Raspberry Pi wurde von der britschischen Raspberry Pi Foundation entwickelt. Er kam anfang 2015 auf den Markt; sein großer Markterfolg wird teils als Revival des bis dahin weitgehend bedeutungslosen Heimcomputers zum Programmieren und Experimentieren angesehen."
elif txt == "hintergrund":
n_txt = "Der RasPi wurde von der Stiftung mit dem Ziel entwickelt, jungen Menschen den Erwerb von Programmier- und Hardwarekenntnissen zu erleichtern."
elif txt == "nutzen":
n_txt = "Man kann einen RasPi wie einen ganz normalen Computer nutzen, das einzige worauf zu achten ist, dass die Hardware weniger Leistung bringt. Sie ist vergleichbar mit einem Rechner von 1990.\nHier noch ein paar Nutzungsbeispiele:\n Heimserver\ntragbarer Computer\nWetterstation\nusw."
elif txt == "kosten":
n_txt = "Der Preis für einen Raspberry Pi liegt zwischen 20 und 35 USD, dabei kommt es ganz auf das Modell und dessen Ausstattung an."
else:
n_txt = "Leider kann ich deine Frage nicht beantworten."
raspi.RasPi().answere(n_txt)
答案 0 :(得分:0)
在Base.searching
方法中,您有以下这一行:
raspi.RasPi().answere(n_txt)
这将创建一个新的临时Raspi
类实例,只有在answere()
方法返回后才会被删除。
您需要做的是尽量将database
模块中的代码与raspi
模块中的gui代码完全分开。
数据库模块应如下所示:
# -*- coding: utf-8 -*-
class Base(object):
def searching(self, txt):
if txt == '':
n_txt = "Du hast keine Frage gestellt"
else:
if txt == ("modell"):
...
return n_txt
并且raspi
模块应该如下所示:
# -*- coding: utf-8 -*-
import sys
import database
from PyQt4 import QtCore, QtGui, uic
class RasPi(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.ui = uic.loadUi('main_window.ui')
self.ui.setWindowTitle('Fragen an den Raspi')
self.ui.show()
self.connect(self.ui.ask, QtCore.SIGNAL("clicked()"), self.reading)
# keep an instance of the database
self.db = database.Base()
def reading(self)
txt = unicode(self.ui.question.text()).lower()
# get the answer from the database
ans = self.db.searching(txt)
# show the answer
self.answere(ans)
def answere(self, text):
self.ui.answere.append(text)
if __name__=='__main__':
app = QtGui.QApplication(sys.argv)
raspi = RasPi()
sys.exit(app.exec_())