如何在Raspberry Pi Python中使用带Tkinter的多进程
我试图同时移动两个伺服。但是我不能移动它。因为第二个电机在完成第一个电机运动后移动,这是我在tkinter刻度上命令的。 我已从多进程导入进程并尝试。 当我将缩放命令从如何在Raspberry Pi Python中使用带Tkinter的多进程,tkinter,multiprocess,tkinter-scale,Tkinter,Multiprocess,Tkinter Scale,我试图同时移动两个伺服。但是我不能移动它。因为第二个电机在完成第一个电机运动后移动,这是我在tkinter刻度上命令的。 我已从多进程导入进程并尝试。 当我将缩放命令从command=self.update更改为command=Process(target=update,args()).start时,它会给我name错误:未定义名称“update” 我不知道我应该做什么,所以任何帮助都将不胜感激 我的工作(非同时)代码如下 #!/usr/bin/env python #-*- coding: u
command=self.update
更改为command=Process(target=update,args()).start
时,它会给我name错误:未定义名称“update”
我不知道我应该做什么,所以任何帮助都将不胜感激
我的工作(非同时)代码如下
#!/usr/bin/env python
#-*- coding: utf-8 -*-
from Tkinter import *
import pigpio
import time
servos = 4-5 #GPIO number
pi = pigpio.pi()
horz = int(500)
vert = int(650)
pi.set_servo_pulsewidth(5, 500)
pi.set_servo_pulsewidth(4, 650)
try:
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
scale = Scale(frame, from_=2500, to=500,
orient=HORIZONTAL, command=self.update)
scale.grid(row=0)
scale = Scale(frame, from_=650, to=2000,
orient=VERTICAL, command=self.update2)
scale.grid(row=10)
def update(self, angle_yat):
global horz
a = int(angle_yat)
if horz <= a:
for i in range(horz, a, 20):
pi.set_servo_pulsewidth(5, i)
print "yatay ai: ", i
time.sleep(0.001)
horz = a
else:
for i in range(horz, a, -20):
pi.set_servo_pulsewidth(5, i)
print "yatay ai: ", i
time.sleep(0.001)
horz = a
def update2(self, angle):
global vert
b = int(angle)
if vert <= b:
for i in range(vert, b, 20):
pi.set_servo_pulsewidth(4, i)
print "yatay ai: ", i
time.sleep(0.001)
vert = b
else:
for i in range(vert, b, -20):
pi.set_servo_pulsewidth(4, i)
print "dikey ai: ", i
time.sleep(0.001)
vert = b
root = Tk()
root.wm_title('Servo Control')
app = App(root)
root.geometry("200x150+0+0")
root.mainloop()
except KeyboardInterrupt:
pi.set_servo_pulsewidth(servos, 0)
finally:
pi.stop()
#/usr/bin/env python
#-*-编码:utf-8-*-
从Tkinter进口*
进口pigpio
导入时间
伺服=4-5#GPIO编号
pi=pigpio.pi()
horz=int(500)
垂直=int(650)
设定伺服脉冲宽度(5500)
pi.设定伺服脉冲宽度(4650)
尝试:
类应用程序:
定义初始(自我,主):
帧=帧(主帧)
frame.pack()
比例=比例(框架,从=2500到=500,
方向=水平,命令=自我更新)
比例网格(行=0)
比例=比例(帧,从0=650到=2000,
方向=垂直,命令=自我。更新2)
比例网格(行=10)
def更新(自我、角度):
全球地轴
a=int(角度)
如果horz要使用多处理
您必须将代码放入函数/类中,并使用如果uuuu name uuuu='uuuu main uuu'
,因为新进程运行运行运行相同文件的新python进程,而如果uuuu name uuuu='.\uuu main uu'
决定哪部分仅在主进程中执行,哪部分在新进程中执行。如果你没有如果uuu name uuu='\uuu main uuu'
那么两个进程启动相同的函数,你就有了混乱。顺便说一句:tkinter
在(毫秒,函数名)
之后有函数,它可以用来周期性地执行一些函数,并且可以多次工作,而不是多进程,子进程或线程。您没有update
和update2
-您有app.update
和app.update
@furas,谢谢。当我移动GUI tkinter标尺时,我正试图将伺服移动到tkinter
scale
。我的代码中有两个更新函数update
用于水平移动,而update2
用于垂直移动。例如,当我发出第一个水平移动命令并立即垂直移动时;我的水平伺服做自己的运动。完成水平运动后,垂直伺服开始自己的运动。这就是我的问题。update
和update2
只需要做一些小动作,这样你就可以多次执行它们来完成全部动作。然后您可以使用after()
定期执行这两个函数,看起来这两个函数同时工作。