- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的第一篇文章很抱歉,如果我做错了什么。
我已经在 python3 上使用 tkinter 编写了一个 python 脚本,它在 IDLE3 中运行得非常好。我希望在启动 Pi 时运行此脚本,因此执行以下过程以使用 cron 作业运行 @reboot。
http://www.instructables.com/id/Raspberry-Pi-Launch-Python-script-on-startup/step4/Add-to-your-crontab/
最初我遇到了初始化错误,所以我添加了'/bin/sleep 120;'到@reboot 行,因此它现在读取如下,并且似乎等待足够长的时间以在启动后初始化所有内容。
@reboot/bin/sleep 120; sh/home/pi/launcher.sh >/home/pi/logs/cronlog 2>&1
但是在此之后,我的 cronlog 显示以下错误:
Traceback (most recent call last): File "walk.py", line 29, in MyGUI = Tk() File "/usr/lib/python3.2/tkinter/init.py", line 1701, in init self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use) _tkinter.TclError: no display name and no $DISPLAY environment variable
import sys
import tkinter #might not be needed
from tkinter import *
import pymysql
import os.path
import datetime
import json
#Define local database connection
try:
localdb = pymysql.connect(host="localhost", user="root", passwd="p054169q", db="walk")
except Exception as e:
sys.exit('Can not locate localdb')
lcur = localdb.cursor()
#Define web database connection (Maybe add later for easy sync)
#Initialise GUI using Tkinter
MyGUI = Tk()
#Remove title bar from GUI window
#(BUG: Causes window not to have focus for scanning)
#MyGUI.overrideredirect(1)
#Doing it this way works but disable until working on small screen, this just sets window as fullscreen
#MyGUI.attributes('-fullscreen', True)
#Set window to resolution of screen 800x420 pixels
MyGUI.geometry('800x420')
#Set window title (Perhaps later remove title bar if possible)
MyGUI.title('Island Walk Tracker')
#Set window background colour to black
MyGUI.configure(background='black')
##GLOBAL VARIABLES ##
#Create variable for RFID code
global RFIDcode
RFIDcode = ''
#Create variable for checkpoint number
global checkpoint_number
checkpoint_number = 2
#Create variable for photo filepath
global photo_path
photo_path = ''
## DECLARE ALL TKINTER VARIABLES ##
#Declare like this for a tkinter variable to update dynamically on GUI (A global var will not do this)
rfid_codeTK = StringVar()
rfid_codeTK.set('')
walk_numberTK = IntVar()
walk_numberTK.set(0)
fullnameTK = StringVar()
fullnameTK.set('')
classTK = StringVar()
classTK.set('')
## DEFINE LABELS AND HOW/WHERE THEY APPEAR ON THE SCREEN ##
#USE 'textvariable' instead of text for labels below to link to a live variable (See info here http://www.tutorialspoint.com/python/tk_label.htm)
#Spacer label just adds blank label of fixed width to set width of column and space down one row from top of page
lblSpacer = Label (text = ' ',fg='white',bg='black',font = 'Helvetica 8 bold')
lblSpacer.grid(row=0,column=0)
#TEST CODE: Display variable RFIDcode in a label for testing. Comment out to hide rfid code.
#lblRFID = Label (MyGUI,textvariable = rfid_codeTK ,fg='white',bg='black',font = 'Helvetica 20 bold')
#lblRFID.grid(row=3,column=1)
#Display Walk number in a label
lblWalkNumber = Label(MyGUI,textvariable = walk_numberTK ,fg='white',bg='black',font = 'Helvetica 115 bold')
#Unlike other TK variables this is not placed in grid until after scan as this stops a big '0' appearing on screen
#lblWalkNumber.grid(row=2,column=0)
#Display Walker name in a label
lblWalkerName = Label (MyGUI,textvariable = fullnameTK ,fg='white',bg='black',font = 'Helvetica 25 bold')
lblWalkerName.grid(row=3,column=0)
#Display class in a label
lblWalkerClass = Label(MyGUI,textvariable = classTK ,fg='white',bg='black',font = 'Helvetica 25 bold')
lblWalkerClass.grid(row=4,column=0)
#Display photo on the screen
#TEST CODE: later on change 'Blank' for the field in database that represents Student_ID
#photo_path = 'WALK_PHOTOS/'+ 'Blank' +'.gif'
#pic = PhotoImage(file= photo_path )
#ImgWalkerPhoto = Label(MyGUI,image = pic)
#ImgWalkerPhoto.grid(row=2,column=1)
## EVENT OCCURS WHEN RFID CODE IS ENTERED (following 'enter' keypress) ##
def Update_Walker_Screen(event):
global RFIDcode
global photo_path
global checkpoint_number
#Search database for matching RFIDcode from localdb and SELECT all data from that row
lcur.execute("SELECT walk_number, forename, surname, class, student_id FROM walkers WHERE rfid_code = '"+ RFIDcode +"'")
row = lcur.fetchall()
## SET POSITIONS OF THINGS ON THE TKINTER FORM ##
#Display walker number in its label (done here after the scan event as if done above with other TK variables a big '0' appears on screen because it is an int so has a '0' not null value when initialised.
lblWalkNumber.grid(row=2,column=0)
pic = PhotoImage(file='WALK_PHOTOS/'+ 'Blank' +'.gif')
ImgWalkerPhoto = Label(MyGUI,image = pic)
#Hide image for testing
#ImgWalkerPhoto.grid(row=2,column=1)
## SET VARIABLES TO DISPLAY ON SCREEN (WILL AUTO UPDATE SCREEN WHEN TK VARIABLES CHANGE) ##
#Set rfid_codeTK variable to be RFIDcode from the code entered from scan.
rfid_codeTK.set(RFIDcode)
#Set walk_numberTK variable to be walk_number from the fetched database record
walk_numberTK.set(row[0][0])
#Set fullnameTK variable to be forename + surname from the fetched database record
fullnameTK.set(row[0][1] + ' ' + row[0][2])
#Set classTK variable to be class from the fetched database record
classTK.set(row[0][3])
#Display photo on the screen after scan
photo_path = 'WALK_PHOTOS/'+ row[0][4] +'.gif'
if os.path.isfile(photo_path) == True:
#show photo with filename as
photo_path = 'WALK_PHOTOS/'+ row[0][4] +'.gif'
else:
#show blank photo
photo_path = 'WALK_PHOTOS/Blank.gif'
#Display image
#ImgWalkerPhoto.grid(row=2,column=1)
#This should update screen items (does flash picture up but not sure if its any use)
#MyGUI.update_idletasks()
#Look up current time
walkers_time = datetime.datetime.now().strftime("%H:%M:%S")
#Log time into database in correct checkpoint column
if checkpoint_number == 1:
#sqlquery = """INSERT INTO walkers('ckpt_1') VALUES({0})""".format(json.dumps(walkers_time))
#lcur.execute("INSERT INTO walkers('ckpt_1') VALUES ()
print('Checkpoint 1 selected')
elif checkpoint_number == 2:
sqlquery = "INSERT INTO walkers('ckpt_1') VALUES({0})".format(json.dumps(walkers_time))
print(sqlquery)
print('Checkpoint 2 selected')
elif checkpoint_number == 3:
print('Checkpoint 3 selected')
elif checkpoint_number == 4:
print('Checkpoint 4 selected')
elif checkpoint_number == 5:
print('Checkpoint 5 selected')
elif checkpoint_number == 6:
print('Checkpoint 6 selected')
elif checkpoint_number == 7:
print('Checkpoint 7 selected')
elif checkpoint_number == 8:
print('Checkpoint 8 selected')
elif checkpoint_number == 9:
print('Checkpoint 9 selected')
elif checkpoint_number == 10:
print('Checkpoint 10 selected')
elif checkpoint_number == 11:
print('Checkpoint 11 selected')
elif checkpoint_number == 12:
print('Checkpoint 12 selected')
else:
#Checkpoint not correctly selected so ask them to restart and select a new checkpoint number
print('Please select a checkpoint number')
#Write the scanned walker details into text file ready to email. If file does not exist then create it, else append to existing file.
#file = open('emaildata.txt', 'a')
with open('emaildata.txt', 'a') as myfile:
myfile.write(str(row[0][0]) + ',' + str(walkers_time) + ',' + 'Y' + '|')#walk_numberTK.get())
#Clear global variable RFIDcode ready for next scan.
RFIDcode = ''
#This function detects any keypresses and then adds them intothe RFIDcode global string variable
#(Ignores Enter key as thats handled earlier in code so never reaches it. Add extra ignores if needed above.)
def keypress(event):
global RFIDcode
RFIDcode = RFIDcode + str(event.char)
#Bind any key press to run the keypress function.
MyGUI.bind('<Key>',keypress)
#Bind an 'Enter' key press to run the Update_Walker_Screen function.
MyGUI.bind('<Return>',Update_Walker_Screen)
MyGUI.mainloop()
最佳答案
我不认为您的代码有问题导致了您的错误。尤其是因为你说:
I want to add that my code runs fine from idle, fine from terminal
cron
是用于安排重复性工作的出色工具,我经常使用它(实际上是每分钟永远),但它可能不是满足您需求的最佳工具。
sudo nano /etc/xdg/lxsession/LXDE/autostart
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
@sh /home/pi/launcher.sh
@lxterminal --command='sh /home/pi/launcher.sh'
#!/usr/bin/python2
或 #!/usr/bin/python3
#!/bin/sh
或者也许 #!/bin/bash
chmod +X ./myscript.sh
或 sudo chmod 755 ./myscript.sh
关于python-3.x - 在树莓派 B+ 上使用 tkinter 从引导 shell 脚本没有显示名称和 $DISPLAY 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29845108/
我正在尝试使用中介包在 R 中进行中介分析。我查看了有关如何执行此操作的文档,并通读了 R 提供的示例(即,我已经运行了“example(mediate)”)。尽管如此,我还是无法运行最简单的中介。理
我在我的应用程序中引导 View 时遇到问题。 我试图在 bootstrap 中获取 View 实例,以便我可以分配 View 变量等。 问题是我似乎无法按照推荐的方式来做。我可以做这个: $this
我已经遵循了几个有关运行 RMI 应用程序的教程。但是,我似乎无法使其工作,因为我一直陷入相同的错误:ClassNotFoundException。我知道这个错误意味着我将文件放在了错误的位置,但我尝
最后,我开始与 Aurelia 合作。有一个入门套件可用 Here这有助于初始化 Aurelia。但它是一个模板,应该在网站模板中使用。 我有一个预配置 WebApi项目,我想在其中使用 Aureli
对于回归问题,我有一个训练数据集: - 3个具有高斯分布的变量 - 20 个均匀分布的变量。 我的所有变量都是连续的,在 [0;1] 之间。 问题是用于对我的回归模型进行评分的测试数据对所有变量具有均
我正在尝试“拉伸(stretch)”或扩展第 1 列中的 A 部分以填充该行的高度。 1行2列: +---------------------+---------------------+ |
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我正在使用 bootstrap 4 填充功能。默认情况下,bootstrap4 中的 col 或 col-12 类在左右应用 15px 填充。我想为移动设备设置左右padding 0,所以我使用下面的
我正在尝试通过自己编写引导加载程序来引导 linux 内核,但不知道如何加载内核。 所有人都在说使用 int 13h 将扇区从硬盘加载到内存。 其中部门应该加载??加载扇区后怎么办? 如果可以的话,请
如何合并两者以创建垂直菜单?我有一个基本的路由设置(它可以工作并呈现为标准的水平菜单): Home Gallery Contact 从 react-bootst
我的应用程序中有一些状态来自服务器并且不会更改(在用户 session 的生命周期内)。此状态在 HTML 中引导。 我应该将它合并到 reducer 中作为商店的一部分吗?const bootstr
有没有办法使用 styled-components与 react-bootstrap 一起? React-bootstrap 为其组件公开了 bsClass 属性而不是 className ,这似乎与
除了 YouTube 播放器的大小之外,以下代码运行良好。我无法将其调整为我想要的大小。 我试着把 width="150"和 height="100"在 iframe 但什么也没发生。
我正在尝试使这个东西与 this one 相同。我已经打印了。但崩溃消耗不起作用。 @foreach($faqs as $faq)
我想在启动 Play 应用程序时运行一些代码。这似乎不起作用。有什么线索吗? public class Global extends GlobalSettings { @Override
我了解监督学习和无监督学习之间的区别: 监督学习是一种使用标记数据“教导”分类器的方法。 无监督学习让分类器“自行学习”,例如使用聚类。 但是什么是“弱监督学习”?它如何对示例进行分类? 最佳答案 更
我对 python 还是很陌生,所以请原谅我,如果这是非常简单的或非常错误的思考方式。 我安装了 python 2.7。根据我在运行以下代码时的理解,它列出了它查找模块的目录。 Python 2.7.
我想使用 bootstrap carousel 制作一个 slider ,但我的 slider 不滑动即使我点击按钮也不会滑动 我测试了很多其他的 bootstrap slider ,我也遇到了同样的
我正在尝试通过替换 base 形状为 (4,2) 的 2D numpy 数组按行进行采样,比如 10 次。最终输出应该是一个 3D numpy 数组。 尝试了下面的代码,它有效。但是有没有不用 for
我是 Bootstrap 的新手,现在我正在检查它的 slider 功能。简单的 slider 和动画效果 - 一切正常。 但是我看不懂,我可以做这样的东西吗? - http://www.owlcar
我是一名优秀的程序员,十分优秀!