打开TKinter和零售物价指数一起参加骷髅计划

2024-10-04 05:26:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python编写一个程序,它将用于一个树莓派的skeball游戏。我已经有了一个脚本,用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,所以任何建议都将有助于其他事情。在


Tags: 代码脚本游戏gpioplaceredscreenlabel