未知TKinter和RPi.GPIO在Skeeball计划中的问题

时间:2016-10-19 20:05:58

标签: python tkinter raspberry-pi gpio

我正在尝试使用Python创建一个程序,用于树莓派的skeeball游戏。我已经有了一个脚本,用于使用Tkinter和python进行简单的9球比赛。我现在的问题是我想添加更多游戏,例如定时游戏或板球,并且不想使用鼠标来控制菜单。我最初的想法是将tkinter帧叠加在一起,并将我想要的游戏拉到顶部。我遇到了太多错误,GPIO无法正常使用它(可能只是我的经验不足,但我决定废弃它)。我现在正在尝试使用代码在使用

按下GPIO按钮时拉出单独的python脚本

import subprocess subprocess.call('/home/pi/Skeeball_python/Skeeball02.py'

该代码在权限被拒绝的情况下返回错误13。我使用我的代码对所有文件和文件夹进行root访问,甚至在我运行程序时以root用户身份登录,但仍然遇到同样的错误。

我的问题是如何在不返回错误的情况下加载单独的脚本以及以超级用户身份运行此代码,因为脚本的GPIO部分需要root访问权限。我应该继续尝试获取单独的脚本加载或我应该尝试不同的方法?

如果它在这里有用的话是我的9球赛代码:

import RPi.GPIO as GPIO
from tkinter import *

Screen = Tk()
Screen.geometry ('1920x1080')
GPIO.setmode (GPIO.BCM)

GPIO.setup (17, GPIO.IN)
GPIO.setup (26, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) #GPIO 26 as reset 

score = IntVar()
ballcount = IntVar()

score.set(0)
ballcount.set(9)

mLabel1 = Label(Screen,text = 'SCORE',fg = 'red',font=("helvatica", 100))
mLabel1.place(x='250',y='250')
mLabel2 = Label(Screen,text = 'BALLS REMAINING',fg = 'red',font=("helvatica", 40))
mLabel2.place(x='250',y='550')
mLabel3 = Label(Screen,textvariable = score,fg = 'red',font=("helvatica", 100))
mLabel3.place(x='950',y='250')
mLabel4 = Label(Screen,textvariable = ballcount,fg = 'red',font=("helvatica", 100))
mLabel4.place(x='950',y='500')
mLabel5 = Label(Screen,text = 'Press Button to Reset',fg = 'red',font=("helvatica", 40))
mLabel5.place(x='250',y='550')

mLabel5.place_forget()


def score100(self):
    if not ballcount.get()==0:
        score.set(score.get()+100)
        ballcount.set(ballcount.get()-1)            
    end()

def reset(self):
    score.set(0)
    ballcount.set(9)
    mLabel2.place(x='250',y='550')
    mLabel4.place(x='950',y='500')
    mLabel5.place_forget()
    LEDwindup()

def end():
    if ballcount.get() == 0:
        mLabel2.place_forget()
        mLabel4.place_forget()
        mLabel5.place(x='250',y='550')

GPIO.add_event_detect(17,GPIO.RISING,callback=score100,bouncetime=500)
GPIO.add_event_detect(26,GPIO.FALLING,callback=reset,bouncetime=500)


Screen.mainloop()
GPIO.cleanup() 

它非常粗糙,我在python中仍然缺乏经验,所以任何建议也会对其他事情有所帮助。

0 个答案:

没有答案