TypeError: может объединять только str (не "set") в str - PullRequest
0 голосов
/ 27 июня 2019

В основном я пытаюсь использовать Entry box, который я сделал в tkinter, как input, чтобы передать value моему Генератору сигналов. Но я получаю ошибку, упомянутую в названии. Если я пропущу value через терминал, он будет работать без проблем, так что, вероятно, это проблема с tkinter, а не с прибором (Rohde and Schwarz 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

1 Ответ

2 голосов
/ 27 июня 2019

Ваша проблема в том, что в f"SOUR:FREQ:CW " + {str(input_var.get())} {str(...)} является установленным литералом .Он создает как заданный, на месте, который вы пытаетесь добавить в строку.

То, что вы хотите с форматированной строкой, которую вы используете, это просто что-то вроде

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

То естьвсе, что находится между {}, будет оценено, преобразовано в строку и вставлено туда.

Если ваше устройство не поддерживает более новые версии Python, удалите f перед строкойи просто сделай это

write("SOUR:FREQ:CW" + str(input_var.get()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...