如何在QLineEdit中返回函数?

时间:2015-12-04 13:53:15

标签: python pyqt

我应该在Qt应用程序的result1result2框中添加函数text1text2的返回,当我点击相对按钮时(注意)我使用的所有变量都是全局的:

def result1(a, b):
    z = result2(a, c)
    return (a*b)/float(z)
def result2(a, c):
    return a/float(c)

button1.clicked.connect(setting)
button2.clicked.connect(setting)
def setting():
    if c != 0:
        text2.setText(result2(a, c))
        text1.setText(result1(a, b))
    return

不关注函数result1result2(我没有写它们),我们知道返回都是浮点数(我尝试打印它们)。

当我设置框的文本时,它会显示以下错误:

QLineEdit.setText(QString): argument 1 has unexpected type 'NoneType'

所以我尝试使用方法toString,如下所示:

def setting():
    if c != 0:
        text2.setText(result2(a, c).toString())
        text1.setText(result1(a, b).toString())
    return

但是,现在又出现了另一个错误:

'NoneType' object has no attribute 'toString'

为什么函数返回NoneType

2 个答案:

答案 0 :(得分:1)

只要您确定该函数正在返回浮点数,这听起来就像是在您不想将其设置为QLineEdit中的文本时,您应该能够执行某些操作像:

services.resume.loginTokens

当然,正如您所说,这要求text2和text1是全局的。

我在第一次创建你的QLineEdit时使用全局变量作为你的价值取得了一些成功的另一个选择:

def setting():
    if c != 0:
        text2.setText(str(result2(a, c)))
        text1.setText(str(result1(a, b)))
    return

答案 1 :(得分:1)

这对我有用:

from random import choice as rand

def result2(a, b, c, d): 
    z = (1 + c/100.0)**(1.0/d) - 1
    w = (1 + z)**b
    return (a*z*w)/(w - 1)

def result1(a, b, d, e):
    x, y = 0.0, float(e)/a
    while y - x > 0.000001:
        j = (x + y)/2
        c = 100*((1 + j)**float(d) - 1)
        q = result2(a, b, c, d)
        x, y = (x, j) if q > c else (j, y)
    return 100*((1 + (x + y)/2)**float(d) - 1)

iterate = 1
while iterate<10:    
    a = rand(range(-10000,10000))
    temp = list(range(-10,10))
    temp.remove(0)
    b = rand(temp)
    c = rand(temp)
    d = rand(temp)
    e = rand(range(-3000,3000))

    print(result2(a,b,c,d))
    print(result1(a,b,d,e))    
    iterate += 1

您必须确保限制将导致除以零的变量组合。我所拥有的并不能保证,但是产生除数为零的组合是不太可能的。