Python 遥控车

Python 遥控车,python,tkinter,Python,Tkinter,我对python和一般的编码都是新手,所以我在一些需要指导的问题上有点纠结 我目前正在学校做一个项目,我正在用树莓皮3做一辆rc车。我目前正在为Tkinter的汽车开发UI。代码如下,我要问的是如何通过点击GUI中的按钮使汽车前进、后退、向左和向右,以及如何在其上添加推送和释放功能 如您所见,我通过远程GPIO(Gpiozero)运行它。另外,我只是在这里添加了左按钮,作为其余代码的示例 我在按钮上有一个照片图像,但如果你想运行代码,只需将其保存,并在tk.button中输入文本即可 i

我对python和一般的编码都是新手,所以我在一些需要指导的问题上有点纠结

我目前正在学校做一个项目,我正在用树莓皮3做一辆rc车。我目前正在为Tkinter的汽车开发UI。代码如下,我要问的是如何通过点击GUI中的按钮使汽车前进、后退、向左和向右,以及如何在其上添加推送和释放功能

如您所见,我通过远程GPIO(Gpiozero)运行它。另外,我只是在这里添加了左按钮,作为其余代码的示例

我在按钮上有一个照片图像,但如果你想运行代码,只需将其保存,并在tk.button中输入文本即可

    import tkinter as tk
    import sys
    from PIL import Image, ImageTk
    import time
    from gpiozero import motor
    from gpiozero.pins.pigpio import PiGPIOFactory

    #remote_factory = PiGPIOFactory(host=)
    turn_speed = 0.5
    drive_speed = 0.15
    #remote_factory = PiGPIOFactory(host=)
    # 19 = FORWARD, 13 = BACKWARD
    motor_1 = Motor(forward=19, backward=13)
    # 6 = LEFT, 5 = RIGHT
    motor_2 = Motor(forward=6, backward=5)

    drive_forward = motor_1.forward
    drive_backward = motor_1.backward
    turn_left = motor_2.forward
    turn_right = motor_2.backward

    #motor_forward = Motor(forward=19)
    #motor_reverse = Motor(backward=13)
    #motor_left = Motor(forward=6)
    #motor_right = Motor(backward=5)





    def main():
        vindu=tk.Tk()
        vindu.title("PiDrv")
        vindu.geometry("300x300")
       #vindu.configure


        #Turn left
        def left_arrow():

            print("Left")
            #turn_left

        def stop():
            print("Stop")

        def left_button():
            b = tk.Button(vindu, command=left_arrow )
            b.grid(row=1, column=1, padx=0, pady=150) 
            image=ImageTk.PhotoImage(file="Arrow_left2.jpg")
            b.config(image=image)
            b.image = image
            b.config(height=70, width=70)
            #b.bind("<Button-1>", left_arrow)
            #b.bind("<ButtonRelease-1>",stop)
            b.grid()
        left_button()

    main()
将tkinter作为tk导入
导入系统
从PIL导入图像,ImageTk
导入时间
来自gpiozero进口电机
从gpiozero.pins.pigpio导入PiGPIOFactory
#远程工厂=PIGPOFACTION(主机=)
转弯速度=0.5
驱动速度=0.15
#远程工厂=PIGPOFACTION(主机=)
#19=向前,13=向后
电机1=电机(向前=19,向后=13)
#6=左,5=右
电机2=电机(向前=6,向后=5)
前进档=电机前进档
驱动装置向后=电机向后
向左转动=电机2.向前
向右转动=电机2.向后转动
#电机向前=电机(向前=19)
#电机\反向=电机(向后=13)
#电机左=电机(正向=6)
#电机右=电机(向后=5)
def main():
vindu=tk.tk()
vindu.名称(“PiDrv”)
几何图形(“300x300”)
#vindu.configure
#左转
def左箭头()
打印(“左”)
#左转
def stop():
打印(“停止”)
def左按钮()
b=tk.按钮(vindu,命令=左箭头)
b、 网格(行=1,列=1,padx=0,pady=150)
image=ImageTk.PhotoImage(file=“Arrow\u left2.jpg”)
b、 配置(图像=图像)
b、 图像=图像
b、 配置(高度=70,宽度=70)
#b、 绑定(“,左箭头)
#b、 绑定(“,停止)
b、 网格()
左按钮()
main()

提前感谢:)

我想问一个像样的问题,它提出了一个重要的问题;如何在tkinter的主循环外循环。答案是在(延迟、回调)之后使用Tk的
,请参见我起草的示例,可以随意运行它

from tkinter import *
import sys
from PIL import Image, ImageTk
import time
from gpiozero import motor
from gpiozero.pins.pigpio import PiGPIOFactory

#remote_factory = PiGPIOFactory(host=)
turn_speed = 0.5
drive_speed = 0.15
#remote_factory = PiGPIOFactory(host=)
# 19 = FORWARD, 13 = BACKWARD
motor_1 = Motor(forward=19, backward=13)
# 6 = LEFT, 5 = RIGHT
motor_2 = Motor(forward=6, backward=5)

drive_forward = motor_1.forward
drive_backward = motor_1.backward
turn_left = motor_2.forward
turn_right = motor_2.backward

#motor_forward = Motor(forward=19)
#motor_reverse = Motor(backward=13)
#motor_left = Motor(forward=6)
#motor_right = Motor(backward=5)

class RcApp(Tk):

    def __init__(self):
        Tk.__init__(self)

        self.left = Button(self, text='go left!')
        self.right = Button(self, text='go right!')
        self.forward = Button(self, text='go forward!')
        self.reverse = Button(self, text='reverse!')

        self.bind('<ButtonPress>', self.callback)
        self.bind('<ButtonRelease>', self.callback)

        self.left.grid(column=0,row=1)
        self.right.grid(column=2,row=1)
        self.forward.grid(column=1,row=0)
        self.reverse.grid(column=1,row=2)

        self.type = None

    def callback(self, event):
        print(event.type)
        self.type = event.type
        if self.type == '4':
            if event.widget == self.left:
                self.after(200, self.move_left)
            if event.widget == self.right:
                self.after(200, self.move_right)
            if event.widget == self.forward:
                self.after(200, self.move_forward)
            if event.widget == self.reverse:
                self.after(200, self.move_reverse)

    def move_left(self):
        if self.type == '4':
            print('moving left!')
            turn_left()
            self.after(200, self.move_left)

    def move_right(self):
        if self.type == '4':
            print('moving right!')
            turn_right()
            self.after(200, self.move_right)

    def move_forward(self):
        if self.type == '4':
            print('moving forward!')
            drive_forward()
            self.after(200, self.move_forward)

    def move_reverse(self):
        if self.type == '4':
            print('moving reverse!')
            drive_backward()
            self.after(200, self.move_reverse)

root = RcApp()
root.mainloop()
从tkinter导入*
导入系统
从PIL导入图像,ImageTk
导入时间
来自gpiozero进口电机
从gpiozero.pins.pigpio导入PiGPIOFactory
#远程工厂=PIGPOFACTION(主机=)
转弯速度=0.5
驱动速度=0.15
#远程工厂=PIGPOFACTION(主机=)
#19=向前,13=向后
电机1=电机(向前=19,向后=13)
#6=左,5=右
电机2=电机(向前=6,向后=5)
前进档=电机前进档
驱动装置向后=电机向后
向左转动=电机2.向前
向右转动=电机2.向后转动
#电机向前=电机(向前=19)
#电机\反向=电机(向后=13)
#电机左=电机(正向=6)
#电机右=电机(向后=5)
RcApp(Tk)类:
定义初始化(自):
Tk.\uuuuuu初始(自我)
self.left=按钮(self,text='go left!')
self.right=按钮(self,text='goright!')
self.forward=按钮(self,text='go forward!')
self.reverse=按钮(self,text='reverse!')
self.bind(“”,self.callback)
self.bind(“”,self.callback)
self.left.grid(列=0,行=1)
self.right.grid(列=2,行=1)
self.forward.grid(列=1,行=0)
self.reverse.grid(列=1,行=2)
self.type=None
def回调(自身、事件):
打印(事件类型)
self.type=event.type
如果self.type==“4”:
如果event.widget==self.left:
赛尔夫后(200,赛尔夫左移)
如果event.widget==self.right:
赛尔夫后(200,赛尔夫右移)
如果event.widget==self.forward:
赛尔夫后(200,赛尔夫前进)
如果event.widget==self.reverse:
赛尔夫后(200,赛尔夫向后移动)
def向左移动(自身):
如果self.type==“4”:
打印('向左移动!')
左转
赛尔夫后(200,赛尔夫左移)
def向右移动(自身):
如果self.type==“4”:
打印('向右移动!')
右转
赛尔夫后(200,赛尔夫右移)
def向前移动(自身):
如果self.type==“4”:
打印('前进!')
向前开
赛尔夫后(200,赛尔夫前进)
def移动_反向(自):
如果self.type==“4”:
打印('反向移动!')
向后驾驶
赛尔夫后(200,赛尔夫向后移动)
root=RcApp()
root.mainloop()
有关
之后的
的更多信息,请访问


祝你好运

谢谢你,洛基维斯特。您知道在触发按钮时,如何激活此代码中电机的输出引脚吗?太好了,非常感谢!感谢你花时间帮助一个新手:)现在它运行得很好,只剩下一件事了,那就是当我按下一个按钮时,汽车就会循环,直到我按下另一个按钮才会停下来。有什么建议吗?