本文整理汇总了Python中storage.Storage.load方法的典型用法代码示例。如果您正苦于以下问题:Python Storage.load方法的具体用法?Python Storage.load怎么用?Python Storage.load使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类storage.Storage
的用法示例。
在下文中一共展示了Storage.load方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import load [as 别名]
def __init__(self):
Singleton.__init__(self)
loghandler.RootHandler(self)
host, port = config.server
self.conn = Connection(self, host, port, config.username)
self.packhandler = self.conn.packhandler
self.timers = TimerManager.get()
self.storage = Storage.load()
self.x = self.y = self.z = 0
self.stance = 0
self.yaw = 180
self.pitch = 180
self.grounded = 1
self.health = 0
self.players = {} # by eid
self.path = None
示例2: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import load [as 别名]
class Menu:
def __init__(self):
reload(sys)
sys.setdefaultencoding("UTF-8")
self.datatype = "main"
self.title = "网易云音乐"
self.datalist = ["排行榜", "艺术家", "新碟上架", "精选歌单", "我的歌单", "DJ节目", "打碟", "收藏", "搜索", "帮助"]
self.offset = 0
self.index = 0
self.storage = Storage()
self.storage.load()
self.collection = self.storage.database["collections"][0]
self.player = Player()
self.ui = Ui()
self.netease = NetEase()
self.screen = curses.initscr()
self.screen.keypad(1)
self.step = 10
self.stack = []
self.djstack = []
self.userid = None
self.username = None
self.resume_play = True
signal.signal(signal.SIGWINCH, self.change_term)
signal.signal(signal.SIGINT, self.send_kill)
self.START = time.time()
def change_term(self, signum, frame):
self.ui.screen.clear()
self.ui.screen.refresh()
def send_kill(self, signum, fram):
self.player.stop()
self.storage.save()
curses.endwin()
sys.exit()
def start(self):
self.START = time.time() // 1
self.ui.build_menu(self.datatype, self.title, self.datalist, self.offset, self.index, self.step, self.START)
self.ui.build_process_bar(
self.player.process_location,
self.player.process_length,
self.player.playing_flag,
self.player.pause_flag,
self.storage.database["player_info"]["playing_mode"],
)
self.stack.append([self.datatype, self.title, self.datalist, self.offset, self.index])
while True:
datatype = self.datatype
title = self.title
datalist = self.datalist
offset = self.offset
idx = index = self.index
step = self.step
stack = self.stack
djstack = self.djstack
self.screen.timeout(500)
key = self.screen.getch()
self.ui.screen.refresh()
# term resize
if key == -1:
self.ui.update_size()
self.player.update_size()
# 退出
if key == ord("q"):
break
# 退出并清除用户信息
if key == ord("w"):
self.storage.database["user"] = {"username": "", "password": ""}
break
# 上移
elif key == ord("k"):
self.index = carousel(offset, min(len(datalist), offset + step) - 1, idx - 1)
self.START = time.time()
# 下移
elif key == ord("j"):
self.index = carousel(offset, min(len(datalist), offset + step) - 1, idx + 1)
self.START = time.time()
# 数字快捷键
elif ord("0") <= key <= ord("9"):
if self.datatype == "songs" or self.datatype == "djchannels" or self.datatype == "help":
continue
idx = key - ord("0")
self.ui.build_menu(self.datatype, self.title, self.datalist, self.offset, idx, self.step, self.START)
self.ui.build_loading()
self.dispatch_enter(idx)
self.index = 0
self.offset = 0
# 向上翻页
elif key == ord("u"):
if offset == 0:
continue
#.........这里部分代码省略.........
示例3: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import load [as 别名]
class Menu:
def __init__(self):
reload(sys)
sys.setdefaultencoding('UTF-8')
self.config = Config()
self.datatype = 'main'
self.title = '网易云音乐'
self.datalist = ['排行榜', '艺术家', '新碟上架', '精选歌单', '我的歌单', 'DJ节目', '每日推荐', '私人FM', '搜索', '帮助']
self.offset = 0
self.index = 0
self.storage = Storage()
self.storage.load()
self.collection = self.storage.database['collections'][0]
self.player = Player()
self.player.playing_song_changed_callback = self.song_changed_callback
self.cache = Cache()
self.ui = Ui()
self.netease = NetEase()
self.screen = curses.initscr()
self.screen.keypad(1)
self.step = 10
self.stack = []
self.djstack = []
self.userid = self.storage.database["user"]["user_id"]
self.username = self.storage.database["user"]["nickname"]
self.resume_play = True
self.at_playing_list = False
signal.signal(signal.SIGWINCH, self.change_term)
signal.signal(signal.SIGINT, self.send_kill)
self.START = time.time()
def change_term(self, signum, frame):
self.ui.screen.clear()
self.ui.screen.refresh()
def send_kill(self, signum, fram):
self.player.stop()
self.cache.quit()
self.storage.save()
curses.endwin()
sys.exit()
def update_alert(self, version):
latest = Menu().check_version()
if latest != version and latest != 0:
if platform.system() == 'Darwin':
os.system('/usr/bin/osascript -e \'display notification "MusicBox Update is available"sound name "/System/Library/Sounds/Ping.aiff"\'')
time.sleep(0.5)
os.system('/usr/bin/osascript -e \'display notification "NetEase-MusicBox installed version:' + version + '\nNetEase-MusicBox latest version:' + latest + '"\'')
else:
os.system('/usr/bin/notify-send "MusicBox Update is available"')
def signin_alert(self, type):
if type == 0:
if platform.system() == 'Darwin':
os.system('/usr/bin/osascript -e \'display notification "Mobile signin success"sound name "/System/Library/Sounds/Ping.aiff"\'')
else:
os.system('/usr/bin/notify-send "Mobile signin success"')
else:
if platform.system() == 'Darwin':
os.system('/usr/bin/osascript -e \'display notification "PC signin success"sound name "/System/Library/Sounds/Ping.aiff"\'')
else:
os.system('/usr/bin/notify-send "PC signin success"')
def check_version(self):
# 检查更新 && 签到
try:
mobilesignin = self.netease.daily_signin(0)
if mobilesignin != -1 and mobilesignin['code'] != -2:
self.signin_alert(0)
time.sleep(0.5)
pcsignin = self.netease.daily_signin(1)
if pcsignin != -1 and pcsignin['code'] != -2:
self.signin_alert(1)
tree = ET.ElementTree(ET.fromstring(str(self.netease.get_version())))
root = tree.getroot()
return root[0][4][0][0].text
except:
return 0
def start_fork(self, version):
pid = os.fork()
if pid == 0:
Menu().update_alert(version)
else:
Menu().start()
def play_pause(self):
if len(self.storage.database["player_info"]["player_list"]) == 0:
return
if self.player.pause_flag:
self.player.resume()
else:
self.player.pause()
time.sleep(0.1)
def next_song(self):
if len(self.storage.database["player_info"]["player_list"]) == 0:
return
self.player.next()
#.........这里部分代码省略.........
示例4: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import load [as 别名]
class Menu:
def __init__(self):
reload(sys)
sys.setdefaultencoding("UTF-8")
self.config = Config()
self.datatype = "main"
self.title = "网易云音乐"
self.datalist = ["排行榜", "艺术家", "新碟上架", "精选歌单", "我的歌单", "DJ节目", "每日推荐", "私人FM", "搜索", "帮助"]
self.offset = 0
self.index = 0
self.storage = Storage()
self.storage.load()
self.collection = self.storage.database["collections"][0]
self.player = Player()
self.player.playing_song_changed_callback = self.song_changed_callback
self.cache = Cache()
self.ui = Ui()
self.netease = NetEase()
self.screen = curses.initscr()
self.screen.keypad(1)
self.step = 10
self.stack = []
self.djstack = []
self.userid = self.storage.database["user"]["user_id"]
self.username = self.storage.database["user"]["nickname"]
self.resume_play = True
self.at_playing_list = False
signal.signal(signal.SIGWINCH, self.change_term)
signal.signal(signal.SIGINT, self.send_kill)
self.START = time.time()
def change_term(self, signum, frame):
self.ui.screen.clear()
self.ui.screen.refresh()
def send_kill(self, signum, fram):
self.player.stop()
self.cache.quit()
self.storage.save()
curses.endwin()
sys.exit()
def alert(self, version):
latest = Menu().check_version()
if latest != version:
if platform.system() == "Darwin":
os.system(
'/usr/bin/osascript -e \'display notification "MusicBox Update is available"sound name "/System/Library/Sounds/Ping.aiff"\''
)
time.sleep(0.5)
os.system(
"/usr/bin/osascript -e 'display notification \"NetEase-MusicBox installed version:"
+ version
+ "\nNetEase-MusicBox latest version:"
+ latest
+ "\"'"
)
else:
os.system('/usr/bin/notify-send "MusicBox Update is available"')
def check_version(self):
# 检查更新
tree = ET.ElementTree(ET.fromstring(str(self.netease.get_version())))
root = tree.getroot()
return root[0][4][0][0].text
def start_fork(self, version):
# Hong, Fork a child process.
# Return 0 in the child and the child’s process id in the parent.
pid = os.fork()
if pid == 0:
Menu().alert(version)
else:
Menu().start()
def play_pause(self):
if len(self.storage.database["player_info"]["player_list"]) == 0:
return
if self.player.pause_flag:
self.player.resume()
else:
self.player.pause()
time.sleep(0.1)
def next_song(self):
if len(self.storage.database["player_info"]["player_list"]) == 0:
return
self.player.next()
time.sleep(0.1)
def previous_song(self):
if len(self.storage.database["player_info"]["player_list"]) == 0:
return
self.player.prev()
time.sleep(0.1)
def start(self):
# Hong, Return the time in seconds since the epoch as a floating point number.
self.START = time.time() // 1
self.ui.build_menu(self.datatype, self.title, self.datalist, self.offset, self.index, self.step, self.START)
#.........这里部分代码省略.........
示例5: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import load [as 别名]
class Menu:
def __init__(self):
reload(sys)
sys.setdefaultencoding('UTF-8')
self.datatype = 'main'
self.title = '网易云音乐'
self.datalist = ['排行榜', '艺术家', '新碟上架', '精选歌单', '我的歌单', 'DJ节目', '打碟', '收藏', '搜索', '帮助']
self.offset = 0
self.index = 0
self.storage = Storage()
self.storage.load()
self.collection = self.storage.database['collections'][0]
self.player = Player()
self.cache = Cache()
self.ui = Ui()
self.netease = NetEase()
self.screen = curses.initscr()
self.screen.keypad(1)
self.step = 10
self.stack = []
self.djstack = []
self.userid = None
self.username = None
self.resume_play = True
signal.signal(signal.SIGWINCH, self.change_term)
signal.signal(signal.SIGINT, self.send_kill)
self.START = time.time()
def change_term(self, signum, frame):
self.ui.screen.clear()
self.ui.screen.refresh()
def send_kill(self, signum, fram):
self.player.stop()
self.cache.quit()
self.storage.save()
curses.endwin()
sys.exit()
def start(self):
self.START = time.time() // 1
self.ui.build_menu(self.datatype, self.title, self.datalist, self.offset, self.index, self.step, self.START)
self.ui.build_process_bar(self.player.process_location, self.player.process_length, self.player.playing_flag,
self.player.pause_flag, self.storage.database['player_info']['playing_mode'])
self.stack.append([self.datatype, self.title, self.datalist, self.offset, self.index])
while True:
datatype = self.datatype
title = self.title
datalist = self.datalist
offset = self.offset
idx = index = self.index
step = self.step
stack = self.stack
djstack = self.djstack
self.screen.timeout(500)
key = self.screen.getch()
self.ui.screen.refresh()
# term resize
if key == -1:
self.ui.update_size()
self.player.update_size()
# 退出
if key == ord('q'):
break
# 退出并清除用户信息
if key == ord('w'):
self.storage.database['user'] = {
"username": "",
"password": "",
}
break
# 上移
elif key == ord('k'):
self.index = carousel(offset, min(len(datalist), offset + step) - 1, idx - 1)
self.START = time.time()
# 下移
elif key == ord('j'):
self.index = carousel(offset, min(len(datalist), offset + step) - 1, idx + 1)
self.START = time.time()
# 数字快捷键
elif ord('0') <= key <= ord('9'):
if self.datatype == 'songs' or self.datatype == 'djchannels' or self.datatype == 'help':
continue
idx = key - ord('0')
self.ui.build_menu(self.datatype, self.title, self.datalist, self.offset, idx, self.step, self.START)
self.ui.build_loading()
self.dispatch_enter(idx)
self.index = 0
self.offset = 0
# 向上翻页
elif key == ord('u'):
if offset == 0:
continue
#.........这里部分代码省略.........
示例6: Mainloop
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import load [as 别名]
class Mainloop(threading.Thread):
def __init__(self, parent):
threading.Thread.__init__(self)
self.parent = parent
self.network = Network()
self.storage = Storage()
self.controlFrame = Frame(parent)
self.controlFrame.grid(row=0, column=0, columnspan=99, padx=10, pady=10, sticky=NW)
self.recordingName = Textbox(self.controlFrame, 'Name of recording: ')
self.recordingName.grid(row=0, column=0, sticky=NW, padx=10)
self.buttonsFrame = Frame(self.controlFrame)
self.buttonsFrame.grid(row=1, column=0, sticky=NW, pady=10)
self.recordButton = Toggle(self.buttonsFrame, 'Record', lambda: self.record('on'), lambda: self.record('off'))
self.TCPOverride = Toggle(self.buttonsFrame, 'Enable TCP', lambda: self.tcp('on'), lambda: self.tcp('off'))
self.recordButton.grid(row=0, column=0, sticky=NW, padx=10)
self.TCPOverride.grid(row=0, column=1, sticky=NW, padx=10)
self.camerasFrame = Frame(parent)
self.camerasFrame.grid(row=1, column=0, padx=10, pady=10, sticky=NW)
self.gpMaster = GoProMaster(self.camerasFrame, self.network)
self.TCPServer = tcp.TCP()
self.localUDP = udp.UDP()
self.shouldExit = False
self.load()
def run(self):
self.localUDP.open('127.0.0.1', 6000, 7000, timeout=0)
timer = 0
while not self.shouldExit:
self.save()
self.addMountedCameras()
self.sendAliveMessage()
if self.TCPServer.isActive():
self.processMessage(self.TCPServer.get())
if timer % 20 == 0:
for ssid in self.network.getSSIDList():
if self.network.isGoPro(ssid):
self.addCamera(ssid)
time.sleep(0.1)
timer += 1
def addCamera(self, ssid):
if not self.gpMaster.exists(ssid):
self.gpMaster.addSlave(ssid)
def record(self, state):
self.gpMaster.record(state, self.recordingName.getText())
def tcp(self, state):
if state == 'on':
self.recordButton.disable()
self.TCPServer = tcp.TCP()
self.TCPServer.listen(config.getTCPInfo()[0], int(config.getTCPInfo()[1]), timeout=0.01)
elif state == 'off':
self.recordButton.enable()
self.TCPServer.close()
def processMessage(self, message):
if not message:
return
message = message.lower()
if message == 'record on':
self.TCPServer.put('Starts recording')
self.record('on')
self.recordButton.setState(True)
elif message == 'record off':
self.TCPServer.put('Stops recording')
self.record('off')
self.recordButton.setState(False)
elif message[0:7] == 'recname':
self.TCPServer.put('Recording name set to: ' + message[8:])
self.recordingName.setText(message[8:])
def exit(self):
self.shouldExit = True
self.localUDP.close()
self.TCPServer.close()
self.gpMaster.exit()
def save(self):
toSave = self.recordingName.getText() + ',' + str(self.recordButton.getState())
self.storage.save('main', toSave)
def load(self):
loaded = self.storage.load('main')
if not loaded:
return
loaded = loaded.split(',')
self.recordingName.setText(loaded[0])
#.........这里部分代码省略.........
示例7: Menu
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import load [as 别名]
class Menu(object):
def __init__(self):
reload(sys)
sys.setdefaultencoding('UTF-8')
self.config = Config()
self.datatype = 'main'
self.title = 'NetEase Music'
self.datalist = ['Charts', 'Artists', 'New Songs', 'Songs', 'My Songs', 'Radio Stations', 'Recommended',
'Personal Radio', 'Search', 'Help']
self.offset = 0
self.index = 0
self.storage = Storage()
self.storage.load()
self.collection = self.storage.database['collections'][0]
self.player = Player()
self.player.playing_song_changed_callback = self.song_changed_callback
self.cache = Cache()
self.ui = Ui()
self.netease = NetEase()
self.screen = curses.initscr()
self.screen.keypad(1)
self.step = 10
self.stack = []
self.djstack = []
self.userid = self.storage.database['user']['user_id']
self.username = self.storage.database['user']['nickname']
self.resume_play = True
self.at_playing_list = False
signal.signal(signal.SIGWINCH, self.change_term)
signal.signal(signal.SIGINT, self.send_kill)
self.START = time.time()
def change_term(self, signum, frame):
self.ui.screen.clear()
self.ui.screen.refresh()
def send_kill(self, signum, fram):
self.player.stop()
self.cache.quit()
self.storage.save()
curses.endwin()
sys.exit()
def update_alert(self, version):
latest = Menu().check_version()
if latest != version and latest != 0:
notify('MusicBox Update is available', 1)
time.sleep(0.5)
notify('NetEase-MusicBox installed version:' + version +
'\nNetEase-MusicBox latest version:' + latest, 0)
def check_version(self):
# 检查更新 && 签到
try:
mobilesignin = self.netease.daily_signin(0)
if mobilesignin != -1 and mobilesignin['code'] != -2:
notify('Mobile signin success', 1)
time.sleep(0.5)
pcsignin = self.netease.daily_signin(1)
if pcsignin != -1 and pcsignin['code'] != -2:
notify('PC signin success', 1)
tree = ET.ElementTree(ET.fromstring(str(self.netease.get_version(
))))
root = tree.getroot()
return root[0][4][0][0].text
except TypeError as e:
log.error(e)
return 0
def start_fork(self, version):
pid = os.fork()
if pid == 0:
Menu().update_alert(version)
else:
Menu().start()
def _is_playlist_empty(self):
return len(self.storage.database['player_info']['player_list']) == 0
def play_pause(self):
if self._is_playlist_empty():
return
if self.player.pause_flag:
self.player.resume()
else:
self.player.pause()
time.sleep(0.1)
def next_song(self):
if self._is_playlist_empty():
return
self.player.next()
time.sleep(0.5)
def previous_song(self):
if self._is_playlist_empty():
return
self.player.prev()
time.sleep(0.5)
#.........这里部分代码省略.........
示例8: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import load [as 别名]
class KeePassHttpServer:
def __init__(self, db_path, password):
self.id = 'KeePassHttpX'
self.host = 'localhost'
self.port = 19455
self.db_path = db_path
self.password = password
self.storage = Storage()
def activate(self):
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_sock.bind((self.host, self.port))
while True:
#print '-- begin while ------'
server_sock.listen(3)
#print 'Waiting for connections...'
client_sock, client_address = server_sock.accept()
receive_message = client_sock.recv(4096)
if receive_message.rstrip() == "":
sys.exit()
response = self.handle_request(receive_message)
client_sock.sendall(response)
client_sock.close()
server_sock.close()
def create_response(self, body):
data = []
data.append('HTTP/1.1 200 OK')
data.append('Date: ' + time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime()))
data.append('Server: python-keypass-http')
data.append('Connection: close')
data.append('Content-Type: application/json; charset=utf-8')
data.append('')
data.append(body)
data.append('')
response = "\n".join(data)
return response
def handle_request(self, request):
#print '-- start handle_request ------'
#print request
#print '-- close handle_request ------'
header, body = request.split('\r\n\r\n')
response = json.loads(body)
if response['RequestType'] == 'associate':
response['Id'] = 'KeePassHttpX'
response['Success'] = False
key = base64.b64decode(response['Key'])
iv = base64.b64decode(response['Nonce'])
verifier = base64.b64decode(response['Verifier'])
kpc = keepass_crypt.KeePassCrypt(key, iv)
if base64.b64encode(iv) == kpc.decrypt(verifier):
response['Success'] = True
self.storage.save('body', body);
elif response['RequestType'] == 'test-associate':
response = self.test_associate(response)
elif response['RequestType'] == 'get-logins':
response = self.get_logins(response)
else:
print '-- start unknown request type response ------'
print response
http_response = self.create_response(json.dumps(response))
return http_response
def test_associate(self, response):
response['Id'] = self.id
response['Success'] = False
storage_data = self.storage.load('body')
if storage_data is None:
return response
keyfile = json.loads(storage_data)
key = base64.b64decode(keyfile['Key']);
iv = base64.b64decode(keyfile['Nonce'])
verifier = base64.b64decode(keyfile['Verifier'])
kpc = keepass_crypt.KeePassCrypt(key, iv)
#.........这里部分代码省略.........
示例9: Main
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import load [as 别名]
class Main(Frame):
"""
Main class of the system.
"""
def __init__(self, master=None):
"""
Main contstructor. Creates an instance of :class:`Storage<storage.Storage>` and starts the graphics-window.
"""
args = {
"fields": ["name", "date", "lifetime"],
"ident": "name",
"uniqueident": True,
"objectname": "person",
"gui": self,
}
self.storage = Storage(**args)
self.is_clicked = False
self.clicked_id = -1
Frame.__init__(self, master)
self.master.title("Medlemsregister Cybernetisk Selskab")
self.grid(padx=15, pady=15)
if not self.storage._testfile():
path = os.path.abspath(__file__).rsplit("/", 1)[0]
self._popup(
"ERROR!",
'Cannot write to file! make sure folder "{}/medlemslister" exists, then restart..'.format(path),
"error",
)
self.destroy()
self.master.destroy()
return
self.create_elements()
loadmsg = self.storage.load()
if "error" in loadmsg:
self.infotext.set("ERROR! {}".format(loadmsg["error"]))
elif "success" in loadmsg:
self.infotext.set("Success! {}".format(loadmsg["success"]))
self._populate_list()
def create_elements(self):
"""
creates all graphics elements and places them in the graphics grid.
"""
# global shortcuts
self.master.bind("<F1>", self.display_help)
self.master.bind("<Control-f>", self.search)
self.master.bind("<Control-d>", self.delete)
self.master.bind("<Control-r>", self._populate_list)
self.master.bind("<Control-s>", self.save_to_file)
monospace = tkFont.Font(family="Courier", size=10, weight="normal")
# menubar:
menubar = Menu(self.master)
backupmenu = Menu(menubar, tearoff=0)
backupmenu.add_command(label="Backup to Google (Note: Slow!)", command=self.google_write)
backupmenu.add_command(label="Read backup from Google", command=self.google_read)
backupmenu.add_separator()
backupmenu.add_command(label="Merge with Wiki", command=self.wiki_merge)
backupmenu.add_command(label="Overwrite Wiki with local storage", command=self.wiki_overwrite)
specialmenu = Menu(menubar, tearoff=0)
specialmenu.add_command(label="Set as lifetime member", command=self.set_lifetime)
specialmenu.add_command(label="Remove lifetime membership", command=self.unset_lifetime)
specialmenu.add_command(label="Change a users id", command=self.update_id)
menubar.add_cascade(label="Backup", menu=backupmenu)
menubar.add_cascade(label="Special Actions", menu=specialmenu)
menubar.add_command(label="Help (F1)", command=self.display_help)
self.master.config(menu=menubar)
# Info-label
self.infotext = StringVar()
self.info = Label(self, textvariable=self.infotext)
self.info.pack()
self.info.grid(row=0, column=0, columnspan=10)
self.infotext.set("Welcome")
# Save-button
self.savebtn = Button(self, text="Save (enter)", command=self.create, width=11)
self.savebtn.grid(row=3, column=7)
# Omnibar (entry-field for add/search/delete)
self.omnibar = Entry(self, width=28)
self.omnibar.grid(row=3, column=0, columnspan=1)
self.omnibar.bind("<Return>", self.create)
self.omnibar.configure(font=monospace)
# List of members
self.memlist = SL(self, height=25, width=71, callback=self._click_list)
self.memlist.grid(row=7, column=0, columnspan=10)
self.memlist.listbox.configure(font=monospace)
#.........这里部分代码省略.........
示例10: GoPro
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import load [as 别名]
class GoPro(threading.Thread):
def __init__(self, parent, goproinfo, network):
threading.Thread.__init__(self)
self.info = goproinfo
self.camera = GoProHero(password=self.info.getPassword(), log_level=logging.CRITICAL)
self.storage = Storage()
self.status = goprostatus.GoProStatus()
self.files = goprofiles.GoProFiles()
self.recordings = goprorecordings.GoProRecordings()
self.gui = GoProGUI(parent, self.info.getSSID(), lambda: self.addObjective('snap'), lambda: self.addObjective('transfer'), self.status.clearObjectives)
self.network = network
self.exitVar = False
self.load()
self.files.unmount(self.info.getUSBid(), self.info.getUSBserial(), self.info.getModel())
print self.info.getSSID() + ': Initialized'
def addObjective(self, objective):
self.status.addObjective(objective)
def run(self):
actions = {
'record': self.record,
'snap': self.snap,
'transfer': self.transfer
}
actionThread = threading.Thread()
while not self.exitVar:
self.save()
self.files.mount(self.info.getUSBid(), self.info.getUSBserial(), self.info.getModel())
self.status.setName(self.gui.getName())
self.gui.setUnsaved(self.recordings.isEmpty())
self.gui.setMounted(self.files.isMounted())
self.gui.setRecording(self.status.isRecording())
self.gui.displayObjectives(self.status.getObjectives())
action, args = self.status.decodeObjective()
if action in actions and not actionThread.isAlive():
actionThread = threading.Thread(target=actions[action], args=(args,))
actionThread.start()
time.sleep(0.1)
def record(self, args):
if args[0] == 'on' and self.status.isRecording() == False and self.gui.shouldRecord():
if not self.command(['mode video', 'record on']):
self.status.completeObjective()
return
self.status.isRecording(True)
self.recordings.stage(' '.join(args[1:]), self.status.getName())
elif args[0] == 'off' and self.status.isRecording() == True:
time.sleep(1)
if not self.command(['record off']):
self.status.completeObjective()
return
self.status.isRecording(False)
self.recordings.commit()
self.status.completeObjective()
def transfer(self, args):
if self.files.isMounted() and not self.recordings.isEmpty():
patterns = self.files.findMatchingFiles(self.recordings.getRecordings())
correctPattern = self.gui.confirmPattern(self.recordings.getRecordings(), patterns)
self.files.trackAllExcept(correctPattern)
self.save()
successfulIndices = self.files.copy(self.recordings.getRecordings(), correctPattern)
self.files.trackAll()
self.save()
for i in reversed(successfulIndices):
self.recordings.delete(i)
self.status.completeObjective()
def snap(self, args):
try:
self.connect()
_, image = self.camera.image().split(',')
if not os.path.isdir('tmp'):
os.mkdir('tmp')
file = open('tmp/image.png', 'wb')
file.write(image.decode('base64'))
file.close()
os.system('eog tmp/image.png &')
except:
pass
finally:
self.disconnect()
self.status.completeObjective()
def connect(self):
self.network.connect(self.info.getSSID(), self.info.getPassword())
def disconnect(self):
self.network.disconnect()
def testConnection(self):
self.connect()
self.disconnect()
#.........这里部分代码省略.........