Так что я делаю эту кость на Raspberry pi SenseHat, и я хочу, чтобы сообщение прокрутки прекратилось, если был обнаружен «тряска», а затем отобразило кость. Я пытался использовать sys.exit в потоке t1, но он выходит из всей программы. Это как-то связано с тем, как я делаю потоки, потому что оба потока по какой-то причине имеют одинаковый идентификатор. Или вы думаете, что есть более простой способ сделать это? Любая помощь приветствуется. Спасибо.
from sense_hat import SenseHat
import threading as th
import random
import time
import sys
sense = SenseHat()
sense.clear()
def show_message_nw(message) :
global sense
sense.show_message(message)
t1 = th.Thread
t2 = th.Thread
def message_new_thread(message):
t1(target=show_message_nw, args=(message,)).start()
print(th.get_ident())
message_new_thread("Shake to Roll Dice")
#define color pixels
r = [255, 0, 0] # red pixel
g = [0, 128, 0] # green pixel
b = [0, 0, 0] # no color pixel
# Set one to six die pattern
one = [
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,r,r,b,b,b,
b,b,b,r,r,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
]
two = [
b,b,b,b,b,b,b,b,
b,g,g,b,b,b,b,b,
b,g,g,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,g,g,b,b,
b,b,b,b,g,g,b,b,
b,b,b,b,b,b,b,b,
]
three = [
r,r,b,b,b,b,b,b,
r,r,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,r,r,b,b,b,
b,b,b,r,r,b,b,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,r,r,
b,b,b,b,b,b,r,r,
]
four = [
b,b,b,b,b,b,b,b,
b,g,g,b,b,g,g,b,
b,g,g,b,b,g,g,b,
b,b,b,b,b,b,b,b,
b,b,b,b,b,b,b,b,
b,g,g,b,b,g,g,b,
b,g,g,b,b,g,g,b,
b,b,b,b,b,b,b,b,
]
five = [
r,r,b,b,b,b,r,r,
r,r,b,b,b,b,r,r,
b,b,b,b,b,b,b,b,
b,b,b,r,r,b,b,b,
b,b,b,r,r,b,b,b,
b,b,b,b,b,b,b,b,
r,r,b,b,b,b,r,r,
r,r,b,b,b,b,r,r,
]
six = [
b,g,g,b,b,g,g,b,
b,g,g,b,b,g,g,b,
b,b,b,b,b,b,b,b,
b,g,g,b,b,g,g,b,
b,g,g,b,b,g,g,b,
b,b,b,b,b,b,b,b,
b,g,g,b,b,g,g,b,
b,g,g,b,b,g,g,b,
]
# define a die function from pattern one to six
def roll_die():
r = random.randint(1,6)
if r == 1:
sense.set_pixels(one)
elif r == 2:
sense.set_pixels(two)
elif r == 3:
sense.set_pixels(three)
elif r == 4:
sense.set_pixels(four)
elif r == 5:
sense.set_pixels(five)
elif r == 6:
sense.set_pixels(six)
#Use accelerometer to read the motion from senseHat
def main():
while True:
stop_threads = True
x, y, z = sense.get_accelerometer_raw().values()
x = abs(x)
y = abs(y)
z = abs(z)
if x > 1.4 or y > 1.4 or z > 1.4:
t1(target = sys.exit(),).run()
print(th.get_ident())
roll_die()
t = 0.5
time.sleep(t)
t2(target = main()).start()