在1个Tkinter窗口中运行2 .py脚本

时间:2017-08-01 20:10:09

标签: python tkinter

简短版本: 使用tkinter控制它的一个小覆盆子pi机器人项目。 该脚本可以工作,但希望能够在头部达到限位开关时控制主体,因此我创建了2个脚本,以便在bash shell中一起运行。 这会创建2个tk窗口,但只能根据哪个窗口处于活动状态来控制部件 所以我认为在1 tk窗口中运行2个脚本会解决这个问题,所以我按照这个答案: How to Open Multiple Tkinter windows in one window

脚本运行,我得到1个窗口,但只注册来自mycode2.py的键盘输入,而没有来自mycode1.py

不确定我是否做错了或是否可能?

如果有人能给我任何建议,我会非常感激

由于

mycode1.py

  import time
import RPi.GPIO as gpio
import Tkinter as tk
import os
import random 
from Tkinter import*
from headclass import Right

class Left(Frame):
    def _init_(self, parent):
        Frame._init_(self, parent, width=100, height=100)
        self.config(bg='white')

class Body:
        def __init__(self):
        gpio.setmode(gpio.BOARD)
        gpio.setwarnings(False)

        self.y = 0

        self.command = tk.Tk()
        self.command.bind('<KeyPress>', self.key_input)
        self.command.bind('<KeyRelease>', self.key_release)
        self.command.mainloop()

# Define keyboard inputs   

    def key_input(self, event):
        if ord(event.char) == 27:
            gpio.cleanup()
            quit()
        key_press = event.char.lower()

        if self.y == 0:
            if key_press == 'w':
               print 'W'

        else:
           pass

    def key_release(self, event):
        if self.y == 0:
             self.stop_body()
        else:
            pass  




# instantiate a Robot object to start the program
my_robot = Body()


if _name_ == "_main_":
    root = Tk()
    Left(root).pack(side=LEFT)
    Right(root).pack(side=RIGHT)
    root.mainloop()` 

mycode2.py

import time
import RPi.GPIO as gpio
import Tkinter as tk
import os
from Tkinter import *

class Right(Frame):
  def_init_(self, parent):
    Frame._init_(self, parent, width=100, height=100)
    self.config(bg='black')


class Head:
    def __init__(self):
        gpio.setmode(gpio.BOARD)
        gpio.setwarnings(False)


        self.x = 1
        self.y = 0

        self.command = tk.Tk()
        self.command.bind('<KeyPress>', self.key_input)
        self.command.bind('<KeyRelease>', self.key_release)
        self.command.mainloop()

# DEFINE KEY INPUT    

    def key_input(self, event):
        if ord(event.char) == 27:
            gpio.cleanup()
            quit()
        key_press = event.char.lower()

        if self.y == 0:
            if key_press == 'n':
              print 'N'
        else:
           pass

    def key_release(self, event):
        if self.y == 0:
             self.stop_head()
        else:
            pass


# instantiate a Robot object to start the program
my_robot = Head()

1 个答案:

答案 0 :(得分:0)

管理得出一个不同的计划,仍然有一个单一的脚本,但添加到它并不是100%,但看到它是一个简单的机器人项目,我可以忍受它