2016-07-11 6 views
0

私は2つの整数変数をパックし、Pythonでstruct.packを使ってシリアルポートに書き込もうとしています。変数は整数変数として定義されていますが、次のエラーが発生します。 'struct.error:必須の引数は整数ではありません'Pythonのstruct.packで整数変数を渡すのが難しい

実際の数値をパックするのに成功しました。 、私は、単純な何かが欠けています確信している

def Pace(): 

ser.write(struct.pack('!BB',var1,var2) 

私のコードは私がコマンドを呼び出しTkinterの中と比べて構築されたスライダーのシリーズを使用して整数値を割り当てる

var1 = IntVar() 
var2 = IntVar() 

です私は変数がInt()またはそれと同等の整数になることさえできないようです。

ご協力いただければ幸いです。

は、私が思う

+0

はIntVar' '何ですか?クラス?機能?おそらく 'None'を返しますか?また、 'B'は' unsigned char'、 'i'は' int'です。詳細については、[docs](https://docs.python.org/3/library/struct.html#format-characters)を参照してください。 – Tim

+0

コンテンツを取得するために 'get()'を使い、それを設定するために 'set()'を使います([Reference](http://effbot.org/tkinterbook/variable.htm)) –

答えて

-1
ser.write(struct.pack('!BB',var1.get(),var2.get()) 

ありがとうござい少なくとも...多分そのわずかvar1(),var2() ...その私はTkinterので台無しので、しばらくは

1

IntVar()が整数ではありませんでし - Tkinterのオブジェクトでありますそれが価値の変化であるときにオブザーバーに通知するのに使用されます。

struct packで使用するには、基本となるプリミティブを取得する必要があります。 struct.pack( '!BB'、var1.get()、var2.getは())

.get() method in docs (emphasis mine):

The get method returns the current value of the variable, as a Python object. For BooleanVar variables, the returned value is 0 for false, and 1 for true. For DoubleVar variables, the returned value is a Python float. For IntVar, it’s an integer. For StringVar, it’s either an ASCII string or a Unicode string, depending on the contents.

関連する問題