无法正确格式化字符串

时间:2018-07-20 04:05:33

标签: python tkinter raspbian

(raspbian,rp3)

我可以从PC控制台向我的GUI(tkinter)发送一个字符串。例子:

  

$ SK039AR878HT010;

(出于测试目的,我从控制台手动发送了此命令,但将来我的控制台将被一台机器取代)

该命令基本上表示:SK = 3.9,AR = 87.8和HT = 10%(进度条)。这些值进入GUI,并在GUI上进行相应设置。

并行地,GUI还会连续向控制台发送类似的字符串(以响应我发送的内容:$ SK039AR878HT010;)

  

$ ST039HT10;

(在GUI上手动设置了ST)

现在的问题是通信协议说,每个变量后面应有三位数字。但是可以看出,对于HT,其后跟两位数字,即10。正确的格式为

  

$ ST039HT010;

要用ST实现相同的效果(您可以看到039上有一个三位数,代表3.9),我这样做是

            if self.App.stval<10:

               self.App.port.write(serial.to_bytes(str.encode('$'+ 'ST'+'0' + str(int(self.App.stval*10))+'HT'+ str(int(self.App.mpb["value"]))+';' )) )
            else:
                self.App.port.write(serial.to_bytes(str.encode('$'+ 'ST' + str(int(self.App.stval*10))+'HT'+str(int(self.App.mpb["value"]))+';' )) )

在这里,stval是ST的值(设置温度,由GUI完成),在上述情况下为3.9摄氏度。

也就是说,每当我的ST值(stval)小于10时,我都会插入一个“ 0”。因此,ST后跟三位数字。

我无法开发关于如何使用HT进行相同的三位数格式化的逻辑(同样,我也是python的新手)? HT是进度条上的一个值(整数),不能超过100%,而ST是室温,几乎不会超过50%(可以是十进制)。

我真的很感谢您在这方面的帮助。

1 个答案:

答案 0 :(得分:1)

您可以通过基本的字符串格式来做到这一点。

 grdView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(final AdapterView<?> adapterView, View view, final int i, long l) {

                    showDialog();

                return true;
                }
        });

输出

stval = '$ST39HT10'
st_values = stval.split('ST')[1].split('HT')
st_values = ['0' + value if len(value)<3 else value for value in st_values ]
new_stval = '$ST'+ st_values[0] + 'HT' + st_values[1]
print(new_stval)

如果stval不是字符串,请使用$ST039HT010 将零填充到该值。