class MainWindow(QMainWindow): def __init__(self): super().__init__() self.stream = VideoStream() self.winId = self.stream.winId() self.setCentralWidget(self.stream) self.resize(500, 500) self.gamepad = Gamepad() self.hud = HUD(self) #flags = QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint)# | QtCore.Qt.WindowStaysOnTopHint) #self.setWindowFlags(flags) def start(self): #self.stream.start() self.gamepad.start() def resizeEvent(self, e): self.hud.resize(self.size())
class Window(Frame): def __init__(self, root): super().__init__() self.root = root self.root.protocol("WM_DELETE_WINDOW", self.on_closing) self.setup_video_frame() bottom_frame = Frame(root, relief=RAISED, borderwidth=1) bottom_frame.pack(fill=BOTH, expand=True) left_analog_frame = Frame(bottom_frame, relief=RAISED, borderwidth=1) digital_frame = Frame(bottom_frame, relief=RAISED, borderwidth=1, width=150) right_analog_frame = Frame(bottom_frame, relief=RAISED, borderwidth=1) left_analog_frame.pack(fill=BOTH, expand=True, side='left') digital_frame.pack(fill=BOTH, expand=True, side='left') right_analog_frame.pack(fill=BOTH, expand=True, side='left') digital_button_wrapper = Frame(digital_frame) digital_button_wrapper.pack(fill=NONE) digital_button_wrapper.place(relx=.5, rely=.5, anchor="c") # Digital buttons btn_font = font.Font(weight='bold') self.up_button = Button(digital_button_wrapper, text=u'\u2191', font=btn_font) self.up_button.pack(side=TOP, padx=5, pady=5) self.down_button = Button(digital_button_wrapper, text=u'\u2193', font=btn_font) self.down_button.pack(side=BOTTOM, padx=5, pady=5) self.left_button = Button(digital_button_wrapper, text=u'\u2190', font=btn_font) self.left_button.pack(side=LEFT, padx=5, pady=5) self.right_button = Button(digital_button_wrapper, text=u'\u2192', font=btn_font) self.right_button.pack(side=RIGHT, padx=5, pady=5) # Left analog bar self.left_analog = Scale(left_analog_frame, from_=10, to=-10) self.left_analog.set(0) self.left_analog.pack() self.left_analog.place(relx=.5, rely=.5, anchor="c") # Right analog bar self.right_analog = Scale(right_analog_frame, from_=10, to=-10) self.right_analog.set(0) self.right_analog.pack() self.right_analog.place(relx=.5, rely=.5, anchor="c") self.gamepad_thread = Gamepad(self) self.orig_color = self.up_button.cget('background') self.start_gamepad() def setup_video_frame(self): self.video_thread = VideoClient() self.video_thread.start() def update_left_analog(self, value): self.left_analog.set(value) def update_right_analog(self, value): self.right_analog.set(value) def update_digital(self, value): def paint_buttons(button1, button2, index): if value[index] == 0: button1.configure(bg=self.orig_color) button2.configure(bg=self.orig_color) elif value[index] == -1: button1.configure(bg='cyan') button2.configure(bg=self.orig_color) else: button1.configure(bg=self.orig_color) button2.configure(bg='cyan') paint_buttons(self.left_button, self.right_button, 0) paint_buttons(self.down_button, self.up_button, 1) def set_status(self, value): self.root.title('{} - {}'.format(TITLE, value)) def on_closing(self): self.gamepad_thread.stop() self.gamepad_thread.join() self.video_thread.stop() self.video_thread.join() sleep(1) self.root.destroy() def start_gamepad(self): self.gamepad_thread.start()