ValueError:complex() arg 是格式错误的字符串

问题描述 投票:0回答:2

我必须将复数作为 tkinter 的 Entry 小部件的输入,并对该复数执行共轭运算。我应用了显式转换方法,但我的代码无法将 Entry 小部件字符串转换为复数并显示错误“ValueError:complex() arg 是格式错误的字符串”任何人都可以帮助我吗? 先感谢您。

    lbl_shh=Label(second_root,text="Enter parameter Shh",fg="red").grid(column=0,row=7,padx=20,pady=20)
    e_shh = Entry(second_root)
    lbl_svv=Label(second_root,text="Enter parameter Svv",fg="red").grid(column=0,row=8,padx=20,pady=20)
    e_svv = Entry(second_root)
    e_shh.grid(column=1,row=7)
    e_svv.grid(column=1,row=8)

    shh=e_shh.get()
    svv=e_svv.get()

    shh=shh.replace(" ","")
    svv=svv.replace(" ","")

    shh=complex(shh)
    svv=complex(svv)

    #shh=complex(''.join(shh.split()))
    #svv=complex(''.join(svv.split()))

    shhs=np.conjugate(shh)
    svvs=np.conjugate(svv)

    num= svv*svvs
    dem=shh*shhs
    f=np.power(num/dem, 0.25)

我必须打印 f 的值

python-3.x tkinter tkinter-entry
2个回答
1
投票

我认为你误解了如何在 tkinter 中以及一般的 Python 中正确获取信息。

当你的代码刚刚初始化时,你不能只使用

.get()
。它将始终返回一个空字符串,除非您有一些代码在 get 之前设置值,此时使用 get 是多余的。

您需要做的是编写一些代码(例如按钮),在有人向条目添加内容后,它将提取您的条目的值。

我还注意到在您的示例代码中您有

second_root
,这让我相信您在代码中使用了 2 个
Tk()
实例。如果是这种情况,这也可能是您问题的一部分。在 tkinter 中编码时,您应该只拥有一个
Tk()
实例。

要列出您的问题,请举个例子:

我添加了一些打印语句、一个函数和一个按钮来显示

get()
实际抓取的内容,或者更确切地说,显示它是一个空字符串。如果执行
get()
时现场还没有任何东西。

enter image description here

这是当您输入

complex()
可以使用的正确值时的示例结果。

enter image description here

请参阅下面的示例以了解

get()
的工作原理:

import tkinter as tk


root = tk.Tk()

entry = tk.Entry(root)
entry.pack()


def print_entry():
    print(entry.get())


tk.Button(root, text='Print Entry', command=print_entry).pack()

root.mainloop()

enter image description here


0
投票

我在下面遇到了同样的错误:

ValueError:complex() arg 是格式错误的字符串

因为我没有放入

j
,用
complex()
str
类型转换为complex类型,如下所示:

complex('3+7') # Error

所以,我输入

j
,然后我就可以得到如下所示的结果:

          # ↓
complex('3+7j')
© www.soinside.com 2019 - 2024. All rights reserved.