【问题标题】:TypeError: can only concatenate str (not "set") to strTypeError:只能将str(不是“set”)连接到str
【发布时间】:2019-06-27 13:15:18
【问题描述】:

基本上我正在尝试使用我在 tkinter 中制作的Entry box 作为input,将value 传递给我的信号发生器。但我得到了标题中提到的错误。如果我通过终端传递value,它可以正常工作,所以这可能是 tkinter 的问题,而不是仪器(罗德和施瓦茨 SMB100A)的问题。

按照错误提示,我尝试将值作为string 传递,但没有运气。

import visa
import tkinter as tk


rm = visa.ResourceManager()
print(rm.list_resources())
inst = rm.open_resource('TCPIP::192.168.100.200::INSTR')

#This one would work, after i bind the function to the button,
#i just press it and it passes the preset value. 
#All i want to do is pass a value through the Entry widget, 
#instead of having a set one.
#freq = str(250000) 
#def freqset_smb100a():
    #inst.write("SOUR:FREQ:CW " + freq)

inst.write("OUTP ON")

def freqset_smb100a():
    inst.write(f"SOUR:FREQ:CW " + {str(input_var.get())})



HEIGHT = 400
WIDTH = 600

root = tk.Tk()

input_var = tk.StringVar()

canvas = tk.Canvas(root, height=HEIGHT, width=WIDTH)
canvas.pack()

frame = tk.Frame(root, bg='#80c1ff', bd=5)
frame.place(relx=0.5, rely=0.1, relwidth=0.75, relheight=0.1, anchor='n')

button = tk.Button(frame, text="Set Freq", font=40, command=freqset_smb100a)
button.place(relx=0.7, relheight=1, relwidth=0.3)

entry = tk.Entry(frame, font=15, textvariable=str(input_var.get))
entry.place(relx=0.35, relheight=1, relwidth=0.3)


root.mainloop()

这是我按下button 传递值时遇到的错误。

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\vrozakos\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:/PyTests/Signal_gen_v2.py", line 19, in freqset_smb100a
    inst.write(f"SOUR:FREQ:CW " + {str(input_var.get())})
TypeError: can only concatenate str (not "set") to str

【问题讨论】:

  • {str(input_var.get())} {} 把它变成set,去掉那些。或者看起来你尝试过 str 格式化,所以:inst.write(f"SOUR:FREQ:CW {str(input_var.get())}")
  • 首先,感谢您的快速回复,如果我这样输入,我的仪器会出现错误invalid separator,它需要+,我会添加评论上面的代码更好地解释,再次感谢您的帮助!
  • 不,您不需要+ - 字符串格式已经为您处理好了。
  • @Rozakos 你在运行什么 python 版本?
  • 我正在运行 python 3.7.3

标签: python python-3.x tkinter


【解决方案1】:

你的问题是f"SOUR:FREQ:CW " + {str(input_var.get())} 中的{str(...)} 是一个set literal。它按集合就地创建,您尝试将其添加到字符串中。

你想要的格式化字符串只是像

 print(f"SOUR:FREQ:CW {input_var.get()}")

也就是说,{} 之间的任何内容都将被计算、转换为字符串并插入其中。

如果您的设备不支持较新的 python 版本,删除字符串前面的f,然后就可以了

write("SOUR:FREQ:CW" + str(input_var.get()))

【讨论】:

  • 首先,感谢您的快速回复,如果我这样输入,我的仪器会出错invalid separator,它需要+,我会在代码中添加注释上面的解释更好,再次感谢您的帮助!
猜你喜欢
  • 2020-09-18
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多