Beispiel #1
0
def makeWindow():
    'create GUI'
    frame = Frame(width=100, height=100, background="blue")
    frame.bind("<Button-1>", handler)
    frame.bind('<Button-3>', handler2)
    frame.pack()
    frame.mainloop()
Beispiel #2
0
def makeWindow():
    'create GUI'
    frame = Frame(width=100, height=100, background = "blue")
    frame.bind("<Button-1>", handler)
    frame.bind('<Button-3>', handler2)
    frame.pack()
    frame.mainloop()
Beispiel #3
0
 def imagen(self):
     marco = self.marco()
     frame = Frame(marco, width='350', height='500')
     frame.pack()
     imagen = PhotoImage(file='Python.gif')
     label = Label(marco, image=imagen).place(x=1, y=1)
     frame.mainloop()
Beispiel #4
0
 def showPicture(self):
     if self._show:
         root = Tk()
         app = Frame(master=root)
         app.master.title("DrawPict Interpret, 2017")
         w = Canvas(root, width=self._pixWidth, height=self._pixHeight)
         # now print all lines
         for line in self._lines:
             self.drawLine(line, w)
         w.pack()
         app.mainloop()
     else:
         pass
Beispiel #5
0
    def plantilla(self):
        m = self.marco()
        cantidad = int(input('ingrese la cantidad de labels a crear: '))
        plantilla = Frame(m, width='350', height='500')
        imagen = PhotoImage(file='Python.png')
        Label(plantilla, image=imagen).place(x=1, y=1)
        plantilla.pack(fill='y', expand='True')

        for z in range(0, cantidad):
            texto = input('Escribe el texto del label ' + str(z) + ': ')
            x = int(
                input('Escribe el eje x del texto del label ' + str(z) + ': '))
            y = int(
                input('Escribe el eje y del texto del label ' + str(z) + ': '))
            Label(plantilla, text=texto).place(x=x, y=y)
        plantilla.config(bg='blue')
        plantilla.mainloop()
    def plantilla(self):
        frame = Frame(self.root)
        imagen = PhotoImage(file='Python.png')
        Label(frame, text='Bienvenidos').grid(row=1,
                                              column=1,
                                              pady=10,
                                              columnspan=4)
        Label(frame, image=imagen).grid(row=2,
                                        column=1,
                                        pady=30,
                                        padx=60,
                                        columnspan=4)
        Label(frame, text='Nombre:').grid(row=3, column=1, pady=20, sticky='e')
        Entry(frame).grid(row=3, column=2)
        Label(frame, text='Apellido:').grid(row=3,
                                            column=3,
                                            pady=20,
                                            sticky='e')
        Entry(frame).grid(row=3, column=4)

        frame.pack()
        frame.mainloop()
Beispiel #7
0
class ABSingleLickGui:
    def __init__(self, root=Tk()):
        self.root = root
        self.root.title("Apple/Banana Single Lick")
        self.root.configure(bg=BACKGROUND_COLOR)
        self.titleLabel = Label(self.root,
                                text='AppleBanana Single Lick Experiment',
                                font=STATUS_FONT,
                                bg=BACKGROUND_COLOR)
        self.ard = None
        self.experiment = None
        self.isConfigLoaded = False
        self.isArdConnected = False
        self.isPumpOn = False
        self.estTime = StringVar()
        self.lickCount = IntVar()
        self.lickCount.set(0)
        self.isSoundOn = BooleanVar()
        self.stopUpdating = threading.Event()
        self.ardUpdater = threading.Thread(target=self.updateVariable)
        port = MouseArduino.getUnoPort()

        #Frames
        self.master = Frame(root, bg=BACKGROUND_COLOR)
        self.master.grid_rowconfigure(0)
        self.master.grid_rowconfigure(1)
        self.master.grid_rowconfigure(2, weight=5)
        self.master.grid_columnconfigure(0, weight=1)
        self.master.grid_columnconfigure(1, weight=1)
        self.master.grid_columnconfigure(2, weight=1)
        self.ardInitFrame = Frame(self.master,
                                  bd=3,
                                  relief='groove',
                                  bg=BACKGROUND_COLOR)
        self.ardControlFrame = Frame(self.master,
                                     bd=3,
                                     relief='groove',
                                     bg=BACKGROUND_COLOR)
        self.initFrame = Frame(self.master,
                               bd=3,
                               relief='groove',
                               bg=BACKGROUND_COLOR)
        self.argFrame = Frame(self.master,
                              bd=3,
                              relief='groove',
                              bg=BACKGROUND_COLOR)
        self.finalControlFrame = Frame(self.master,
                                       bd=3,
                                       relief='groove',
                                       bg=BACKGROUND_COLOR)

        #ardInitFrame
        self.ardInitFrameLabel = Label(self.ardInitFrame,
                                       text="Connect to Hardware",
                                       bg=HEADER_COLOR,
                                       font=LARGE_FONT,
                                       fg='white',
                                       relief='solid',
                                       borderwidth=2,
                                       width=40)
        self.comLabel = Label(self.ardInitFrame,
                              bg=BACKGROUND_COLOR,
                              text="Com Port:",
                              font=TEXT_FONT)
        self.comEntry = Entry(self.ardInitFrame, font=TEXT_FONT)
        self.baudrateLabel = Label(self.ardInitFrame,
                                   bg=BACKGROUND_COLOR,
                                   text="Baudrate:",
                                   font=TEXT_FONT)
        self.baudrateEntry = Entry(self.ardInitFrame, font=TEXT_FONT)
        self.connectButton = Button(self.ardInitFrame,
                                    text="Connect",
                                    font=STATUS_FONT,
                                    command=self.connect)
        self.ardInitFrameLabel.grid(row=0, columnspan=2, padx=40, pady=10)
        self.comLabel.grid(row=1, column=0, sticky=tk.E)
        self.comEntry.grid(row=1, column=1, sticky=tk.W)
        self.baudrateLabel.grid(row=2, column=0, sticky=tk.E)
        self.baudrateEntry.grid(row=2, column=1, sticky=tk.W)
        self.connectButton.grid(row=3, columnspan=2, pady=10)
        self.comEntry.insert(0, port)
        self.baudrateEntry.insert(0, 115200)

        #ardControlFrame
        self.ardControlFrameLabel = Label(self.ardControlFrame,
                                          text='Pre-experiment Control',
                                          bg=HEADER_COLOR,
                                          font=LARGE_FONT,
                                          fg='white',
                                          relief='solid',
                                          borderwidth=2,
                                          width=40)
        self.sendStringEntry = Entry(self.ardControlFrame,
                                     font=TEXT_FONT,
                                     width=20)
        self.sendStringButton = Button(self.ardControlFrame,
                                       text='Send String',
                                       font=TEXT_FONT,
                                       bg=BACKGROUND_COLOR,
                                       command=self.sendString)
        self.rewardButton = Button(self.ardControlFrame,
                                   text='Reward(R)',
                                   font=STATUS_FONT,
                                   width=10,
                                   bg=BACKGROUND_COLOR,
                                   command=self.deliverReward,
                                   height=1)
        self.pumpButton = Button(self.ardControlFrame,
                                 text='Pump Water(P)',
                                 font=STATUS_FONT,
                                 command=self.togglePump,
                                 bg=OFF_COLOR,
                                 width=12,
                                 height=1)
        self.lickLabel = Label(self.ardControlFrame,
                               text='LICK',
                               bg=LICK_OFF_COLOR,
                               font=LICK_FONT,
                               width=10,
                               height=1)
        self.lickCountLabel = Label(self.ardControlFrame,
                                    text='Lick Count :',
                                    bg=BACKGROUND_COLOR,
                                    font=LARGE_FONT)
        self.lickCountButton = Button(self.ardControlFrame,
                                      textvariable=self.lickCount,
                                      font=LARGE_FONT,
                                      bg=BACKGROUND_COLOR,
                                      command=lambda: self.lickCount.set(0))
        self.soundCheckButton = Checkbutton(self.ardControlFrame,
                                            text='Lick Sound',
                                            variable=self.isSoundOn,
                                            bg=BACKGROUND_COLOR)

        self.ardControlFrameLabel.grid(row=0, columnspan=2, padx=40, pady=10)
        self.sendStringEntry.bind('<Return>', self.sendString)
        self.sendStringEntry.grid(row=1, column=0, padx=5, sticky=tk.E)
        self.sendStringEntry.bind('<Escape>', lambda x: self.master.focus())
        self.sendStringButton.grid(row=1, column=1, padx=5, sticky=tk.W)
        self.rewardButton.grid(row=2, column=0, pady=10)
        self.pumpButton.grid(row=2, column=1, pady=10)
        self.lickLabel.grid(row=3, columnspan=2, pady=15)
        self.lickCountLabel.grid(row=4, column=0, sticky=tk.E)
        self.lickCountButton.grid(row=4, column=1, sticky=tk.W)
        self.soundCheckButton.grid(row=5, columnspan=2)

        #initFrame
        self.initFrameLabel = Label(self.initFrame,
                                    text="Session Configuration",
                                    font=LARGE_FONT,
                                    bg=HEADER_COLOR,
                                    fg='white',
                                    relief='solid',
                                    borderwidth=2,
                                    width=40)
        self.loadButton = Button(self.initFrame,
                                 text="Load Config(L)",
                                 font=STATUS_FONT,
                                 command=self.selectFile)
        self.sessionNameLabel = Label(self.initFrame,
                                      text="Session Name:",
                                      font=TEXT_FONT,
                                      bg=BACKGROUND_COLOR)
        self.sessionNameEntry = Entry(self.initFrame, font=TEXT_FONT)
        self.numOfTrialsLabel = Label(self.initFrame,
                                      text="Number of Trials:",
                                      font=TEXT_FONT,
                                      bg=BACKGROUND_COLOR)
        self.numOfTrialsEntry = Entry(self.initFrame, font=TEXT_FONT)
        self.numOfTrialsEntry.bind('<KeyRelease>', self.updateTime)
        self.numOfTrialsEntry.bind('<Escape>', lambda x: self.master.focus())
        self.initFrameLabel.grid(row=0, columnspan=2, padx=40, pady=10)
        self.sessionNameLabel.grid(row=1, column=0, sticky=tk.E)
        self.sessionNameEntry.grid(row=1, column=1, sticky=tk.W)
        self.sessionNameEntry.bind('<Escape>', lambda x: self.master.focus())
        self.numOfTrialsLabel.grid(row=2, column=0, sticky=tk.E)
        self.numOfTrialsEntry.grid(row=2, column=1, sticky=tk.W)
        self.loadButton.grid(row=3, columnspan=2, pady=10)

        #finalControlFrame
        self.finalControlFrameLabel = Label(self.finalControlFrame,
                                            text='Experiment Control',
                                            bg=HEADER_COLOR,
                                            font=LARGE_FONT,
                                            fg='white',
                                            relief='solid',
                                            bd=2,
                                            width=40)
        self.estTimeLabel = Label(self.finalControlFrame,
                                  textvariable=self.estTime,
                                  font=STATUS_FONT,
                                  bg=BACKGROUND_COLOR)
        self.startButton = Button(self.finalControlFrame,
                                  text="START EXPERIMENT",
                                  font='Helvetica 20 bold',
                                  command=self.startExperiment)
        self.finalControlFrameLabel.grid(padx=40, pady=10)
        self.estTimeLabel.grid(pady=10)
        self.startButton.grid(pady=15)

        #master
        self.titleLabel.pack(pady=5)
        self.master.pack(padx=20, pady=20)
        self.initFrame.grid(row=0, column=0)
        self.ardInitFrame.grid(row=1, column=0)
        self.finalControlFrame.grid(row=2, column=0, sticky='NSWE')
        self.argFrame.grid(row=0, column=1, rowspan=3, sticky='NSWE')
        for frame in [
                self.master, self.initFrame, self.ardInitFrame,
                self.finalControlFrame, self.argFrame
        ]:
            frame.bind('r', self.deliverReward)
            frame.bind('p', self.togglePump)
            frame.bind('l', self.selectFile)
            frame.bind('R', self.deliverReward)
            frame.bind('P', self.togglePump)
            frame.bind('L', self.selectFile)
            frame.bind("<Button-1>", lambda e: self.master.focus_set())
        self.updateTime()

    def run(self):
        self.master.mainloop()

    def selectFile(self, event=None):
        fileName = filedialog.askopenfilename()
        self.configFileName = fileName
        for widget in self.argFrame.winfo_children():
            widget.destroy()
        self.argFrameLabel = Label(self.argFrame,
                                   text="Experiment Configuration: " +
                                   os.path.basename(fileName),
                                   font=LARGE_FONT,
                                   bg=HEADER_COLOR,
                                   fg='white',
                                   relief='solid',
                                   bd=2,
                                   width=40).grid(columnspan=2,
                                                  padx=40,
                                                  pady=10)
        try:
            with open(fileName) as f:
                self.args = json.load(f)
        except Exception as e:
            print(e)
        argToLen = lambda x: len(str(x))
        maxArgNameLength = argToLen(
            max(self.args.keys(), key=lambda x: argToLen(x)))
        maxArgValueLength = argToLen(
            max(self.args.values(), key=lambda x: argToLen(x)))
        correctTrialDuration = self.args["Cue duration"] + \
                                self.args["Correct response visual duration"] + \
                                (self.args["Stimulus duration"] if self.args["Give reward without lick"] == 0 else 0)

        wrongTrialDuration   = self.args["Cue duration"] +\
                                self.args["Stimulus duration"] + \
                                self.args["Wrong response flash duration"] + \
                                self.args["Wrong response rest duration"]
        self.trialDuration = correctTrialDuration * self.args[
            "A image probability"] + wrongTrialDuration * (
                1 - self.args["A image probability"])
        for i, (argName, value) in enumerate(
                sorted(self.args.items(), key=lambda item: item[0])):
            lName = Label(self.argFrame,
                          text=str(argName) + " :",
                          font='Helvetica 12 bold',
                          bg=BACKGROUND_COLOR).grid(row=i + 3,
                                                    column=0,
                                                    sticky=tk.E)
            lValue = Label(self.argFrame, text=str(value),
                           bg=BACKGROUND_COLOR).grid(
                               row=i + 3,
                               column=1,
                               sticky=tk.W,
                           )
        self.updateTime()
        self.isConfigLoaded = True

    def connect(self):
        try:
            comport = self.comEntry.get()
            baudrate = self.baudrateEntry.get()
            if comport == "" or baudrate == "":
                raise Exception("Please fill in all values")
            baudrate = int(baudrate)
            self.ard = MouseArduino(comport, baudrate)
            self.ard.start()
            self.ardInitFrame.destroy()
            self.ardUpdater.start()
            self.ardControlFrame.grid(row=1, column=0)
            self.isArdConnected = True
        except Exception as e:
            messagebox.showerror(
                "Error",
                "Could not connect to Arduino. Make sure port is correct or other program isn't grabbing the port :"
                + str(e))

    def deliverReward(self, event=None):
        self.ard.deliverReward()

    def sendString(self, event=None):
        self.ard.write(self.sendStringEntry.get())
        self.sendStringEntry.delete(0, 'end')

    def updateVariable(self):
        while not self.stopUpdating.is_set():
            if self.ard.newMsg.wait(1):
                while not self.ard.msgQueue.empty():
                    self.ard.newMsg.clear()
                    msg = self.ard.msgQueue.get()
                    print(msg)
                    args = Utilities.parse(msg)
                    arg = args[1].strip()
                    if arg == 'LK':
                        self.lickCount.set(self.lickCount.get() + 1)
                        self.lickLabel.configure(bg=ON_COLOR)
                        if self.isSoundOn.get():
                            Sound.cue(0.05)
                        time.sleep(0.2)
                        self.lickLabel.configure(bg=LICK_OFF_COLOR)
                    elif arg == 'startpump':
                        self.pumpButton.configure(bg=ON_COLOR)
                        self.isPumpOn = True
                    elif arg == 'stoppump':
                        self.pumpButton.configure(bg=OFF_COLOR)
                        self.isPumpOn = False

    def togglePump(self, event=None):
        if self.isPumpOn:
            self.ard.stopPump()
        else:
            self.ard.startPump()

    def updateTime(self, event=None):
        numOfTrials = self.numOfTrialsEntry.get()
        try:
            totalDuration = self.trialDuration * int(numOfTrials)
            tmin = totalDuration // 60
            tsec = totalDuration % 60
            timeStr = "{:.0f} Min {:.0f} Sec".format(tmin, tsec)
        except Exception as e:
            timeStr = ""
            print(e)
        self.estTime.set("Estimated duration: {:>10}".format(timeStr))

    def startExperiment(self):
        if not self.isConfigLoaded:
            messagebox.showerror("Error", "Please load configuration file")
        elif not self.isArdConnected:
            messagebox.showerror("Error", "Please connect Arduino")
        else:
            try:
                sessionName = self.sessionNameEntry.get()
                numOfTrials = self.numOfTrialsEntry.get()
                if sessionName == "" or numOfTrials == "":
                    raise Exception("Please fill in all values")
                numOfTrials = int(numOfTrials)
                self.experiment = ABSingleLick(self.ard)
                self.experiment.startExperiment(sessionName, numOfTrials,
                                                self.configFileName)
            except Exception as e:
                messagebox.showerror("Error", e)
Beispiel #8
0
from tkinter import Tk, Frame, Button

# Our routine, that gets to treat all widgets the same.


def print_tree(widget, indent=0):
    """Print a hierarchy of Tk widgets in the terminal."""
    print('{:<{}} * {!r}'.format('', indent * 4, widget))
    for child in widget.winfo_children():
        print_tree(child, indent + 1)


# A small sample GUI application with several widgets.
if __name__ == '__main__':
    root = Tk()
    f = Frame(master=root)
    f.pack()

    tree_button = Button(f)
    tree_button['text'] = 'Print widget tree'
    tree_button['command'] = lambda: print_tree(f)
    tree_button.pack({'side': 'left'})

    quit_button = Button(f)
    quit_button['text'] = 'Quit Tk application'
    quit_button['command'] = f.quit
    quit_button.pack({'side': 'left'})

    f.mainloop()
    root.destroy()
Beispiel #9
0
class GUIMod(threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
        self.img_dict = {}
        self.data_room = []
        self.data_role = {'userName': '******', 'state': '\0', 'roomName': '\0'}
        self.realRoot = None
        self.root = None
        self.rootFrame = None
        self.entryFrame = None

    def loadImg(self):
        self.img_dict['1'] = PhotoImage(file='img/咖啡.png')  # 空闲
        self.img_dict['2'] = PhotoImage(file='img/键盘.png')  # 打字中
        self.img_dict['3'] = PhotoImage(file='img/在线.png')  # 在线
        self.img_dict['4'] = PhotoImage(file='img/忙碌.png')  # 忙碌
        self.img_dict['5'] = PhotoImage(file='img/等待.png')  # 给我点时间,我要思考
        self.img_dict['6'] = PhotoImage(file='img/快进.png')  # 搞快点
        self.img_dict['7'] = PhotoImage(file='img/疑问.png')  # 令人困惑
        self.img_dict['8'] = PhotoImage(file='img/震惊.png')  # 令人震惊
        self.img_dict['9'] = PhotoImage(file='img/灯泡.png')  # 有想法了
        self.img_dict['10'] = PhotoImage(file='img/用户.png')  # 我是主角
        self.img_dict['11'] = PhotoImage(file='img/空白.png')

    def change_state(self, state_list: list):
        try:
            old = self.data_role['state'].split('_')
            if (self.data_role['state'] == '\0'
                    or self.data_role['userName'] == '\0'
                    or self.data_role['roomName'] == '\0'):
                return
            for i in range(len(old)):
                if (state_list[i] == '-1'):
                    state_list[i] = old[i]
            new = '_'.join(state_list)
            if (new == self.data_role['state']):
                return
            myHttpRequest(url_changeState, {
                'userName': self.data_role['userName'],
                'state': new
            })
        except:
            print('change_state error')

    def set_line(self, item: dict, frame: Frame):
        children = frame.winfo_children()
        children[0].configure(text=item['userName'])
        mark = item['state'].split('_')
        children[1].configure(image=self.img_dict[mark[0]])
        children[2].configure(image=self.img_dict[mark[1]])

    def get_role(self):
        for i in range(len(self.data_room)):
            if (self.data_room[i]['userName'] == self.data_role['userName']):
                self.data_role['state'] = self.data_room[i]['state']
                break

    def rebuild(self):
        self.rootFrame.destroy()
        self.rootFrame = Frame(self.root, height=100, width=200)
        self.rootFrame.grid(row=2, column=0)
        for i in range(len(self.data_room)):
            item = self.data_room[i]
            f = Frame(self.rootFrame)
            f.grid(row=i, column=0, pady=3, sticky=W)
            mark = item['state'].split('_')
            Label(f, text=item['userName'], width=10).grid(row=0,
                                                           column=0,
                                                           padx=5)
            Label(f, image=self.img_dict[mark[0]], width=35).grid(row=0,
                                                                  column=1,
                                                                  padx=5)
            Label(f, image=self.img_dict[mark[1]], width=35).grid(row=0,
                                                                  column=2,
                                                                  padx=5)
            if (item['userName'] == self.data_role['userName']):
                Label(f, image=self.img_dict['10'], width=35).grid(row=0,
                                                                   column=3,
                                                                   padx=5)
            else:
                Label(f, image=self.img_dict['11'], width=35).grid(row=0,
                                                                   column=3,
                                                                   padx=5)

    def report_keyboard(self):
        if (is_input_flag == True):
            self.change_state(['2', '-1'])
        else:
            self.change_state(['1', '-1'])

    def update(self):
        if (self.data_role['userName'] != '\0'
                and self.data_role['roomName'] != '\0'):
            self.report_keyboard()
            data_room_new = myHttpRequest(
                url_getRoom, {'roomName': self.data_role['roomName']})
            if (len(data_room_new) != len(self.data_room)):
                self.data_room = data_room_new
                self.rebuild()
            else:
                for i in range(len(self.data_room)):
                    if (self.data_room[i] != data_room_new[i]):
                        self.set_line(data_room_new[i],
                                      self.rootFrame.winfo_children()[i])
                self.data_room = data_room_new
                self.get_role()

        self.root.after(1000, self.update)

    def run(self):
        self.realRoot = Tk()
        self.realRoot.attributes('-alpha', 0.75)
        self.realRoot.title('TRPGHelper')

        self.realRoot.protocol("WM_DELETE_WINDOW", lambda: os._exit(0))

        width = 260
        height = 400
        img = ImageTk.PhotoImage(
            Image.open('img/bg.png').resize((width, height)))
        l = Label(self.realRoot, image=img)
        l.grid(row=0, column=0)

        self.root = Frame(self.realRoot)
        self.root.grid(row=0, column=0)

        self.loadImg()
        self.entryFrame = Frame(self.root, height=50, width=120)
        self.rootFrame = Frame(self.root, height=100, width=120)

        self.entryFrame.grid(column=0)
        self.rootFrame.grid(row=2, column=0, sticky=W)

        ButtonRoomName = Button(self.entryFrame, height=1, text='房间')
        ButtonUserName = Button(self.entryFrame, height=1, text='用户')
        EntryRoomName = Entry(self.entryFrame, width=10)
        EntryUserName = Entry(self.entryFrame, width=10)

        MenuButtonState = Menubutton(self.entryFrame, text='选择状态', width=10)
        ms = Menu(MenuButtonState, tearoff=False)
        ms.add_command(label='我在线哦',
                       command=lambda: self.change_state(['-1', '3']))
        ms.add_command(label='真的很忙',
                       command=lambda: self.change_state(['-1', '4']))
        ms.add_command(label='等等我!',
                       command=lambda: self.change_state(['-1', '5']))
        ms.add_command(label='搞快点!',
                       command=lambda: self.change_state(['-1', '6']))
        ms.add_command(label='令人困惑',
                       command=lambda: self.change_state(['-1', '7']))
        ms.add_command(label='瓦特法?',
                       command=lambda: self.change_state(['-1', '8']))
        ms.add_command(label='懂了悟了',
                       command=lambda: self.change_state(['-1', '9']))
        MenuButtonState.configure(menu=ms)

        def _call_roomNameButton(roomName):
            self.data_role['roomName'] = roomName

        def _call_userNameButton_right():
            myHttpRequest(url_delUser,
                          {'userName': self.data_role['userName']})

        def _call_userNameButton_left(userName):
            if (userName != self.data_role['userName']):
                self.change_state(['1', '4'])
            self.data_role['userName'] = userName
            try:
                if (self.data_role['userName'] != '\0'):
                    myHttpRequest(url_register,
                                  {'userName': self.data_role['userName']})
                    myHttpRequest(
                        url_createRoom, {
                            'userName': self.data_role['userName'],
                            'roomName': self.data_role['roomName']
                        })
                    self.rebuild()
            except:
                print('userNameButton error')

        ButtonRoomName.bind(
            "<Button-1>", lambda f: _call_roomNameButton(EntryRoomName.get()))
        ButtonUserName.bind(
            "<Button-1>",
            lambda f: _call_userNameButton_left(EntryUserName.get()))
        ButtonUserName.bind("<Button-3>",
                            lambda f: _call_userNameButton_right())

        ButtonRoomName.grid(column=0, row=0, ipady=2, pady=5, ipadx=2, padx=5)
        ButtonUserName.grid(column=0, row=1, ipady=2, pady=5, ipadx=2, padx=5)
        EntryRoomName.grid(column=1, row=0, pady=5, ipadx=2, padx=5)
        EntryUserName.grid(column=1, row=1, pady=5, ipadx=2, padx=5)
        MenuButtonState.grid(column=2, row=0, pady=5, ipadx=2, padx=5)

        self.root.after(1000, self.update)
        self.root.mainloop()
Beispiel #10
0
    entry.pack()

    connect = tk.Button()
    connect["text"] = "Connexion"
    connect["command"] = lambda: launchClient(entry.get(), join_window)
    connect.pack()


def launchClient(ip, join_window):
    join_window.destroy()
    Thread(target=bataillenavale.main.run_game,
           args=(False, False, ip)).start()


solo = tk.Button(root)
solo["text"] = "Solo"
solo["command"] = runSolo
solo.pack()

host = tk.Button(root)
host["text"] = "Host a game"
host["command"] = runHost
host.pack()

join = tk.Button(root)
join["text"] = "Join a game"
join["command"] = runClient
join.pack()

app.mainloop()
Beispiel #11
0
            if (not greater and less) or (greater and not less):
                lines.append(
                    canvas.create_line(point_i[0], point_i[1], point_j[0],
                                       point_j[1]))
                # if point_i not in res:
                #     res.append(point_i)

    if not len(lines):
        return "Impossible"
    # return res


if __name__ == "__main__":
    frame = Frame(None, bg='grey', height=2)
    frame.pack()

    canvas = Canvas(frame, width="600", height="600")
    canvas.pack(fill=BOTH, expand=1)
    canvas.bind('<Button-1>', on_dot_click)

    button = Button(frame, text="Start")
    button.bind('<Button-1>', convex_hull)
    button.pack(side='left', padx=10)

    reset = Button(frame, text="Reset")
    reset.pack(side='left', padx=10)
    reset.bind('<Button-1>', reset_canvas)

    frame.mainloop()
    # print(points)
Beispiel #12
0
def showStats():
    statsWindow = Tk()
    statsWindow.wm_title("Game results")
    statsFrame = Frame(statsWindow)

    winsLabel = Label(statsFrame,
                      text="Wins: " + str(wins),
                      font=("Arial", 16),
                      width=15)

    winsLabel.pack()

    losesLabel = Label(statsFrame,
                       text="Loses: " + str(loses),
                       font=("Arial", 16),
                       width=15)

    losesLabel.pack()

    tiesLabel = Label(statsFrame,
                      text="Tie games: " + str(tieGames),
                      font=("Arial", 16),
                      width=15)

    tiesLabel.pack()

    gamesPlayedLabel = Label(statsFrame,
                             text="Games played: " + str(gamesPlayed),
                             font=("Arial", 16),
                             width=15)

    gamesPlayedLabel.pack()

    for stat in gameInfo:
        text = str(gameInfo[stat]).replace("{", "").replace("}", "").replace(
            "'", "")  # removing unnecessary chars
        statLabel = Label(statsFrame, text=text, font=("Arial", 16), width=60)
        statLabel.pack()

    # wins, loses display STARTING POINT
    if (wins != 0
            or loses != 0):  # if wins or loses = 0 no point to display chart
        if (tieGames != 0):
            labels = 'Wins', 'Loses', 'Tie games'
            sizes = [wins, loses, tieGames]
        else:
            labels = 'Wins', 'Loses'
            sizes = [wins, loses]
        fig1, ax1 = plt.subplots()
        ax1.pie(sizes,
                labels=labels,
                autopct='%1.1f%%',
                startangle=90,
                radius=0.5)
        ax1.axis('equal')
        fig1.set_size_inches(3.5, 3)

        pieCanvas = FigureCanvasTkAgg(fig1, master=statsWindow)
        pieCanvas.get_tk_widget().pack()
        pieCanvas.draw()
    # wins, loses display ENDING POINT

    statsFrame.pack()
    statsFrame.mainloop()
Beispiel #13
0
from tkinter import Frame, Label, Button
from tkinter import TOP, YES, BOTH, LEFT, RIGHT, X, Y


def greeting():
    '''
    Prints a greeting
    '''
    print('Hello stdout world!...')


win = Frame()
win.pack(side=TOP, expand=YES, fill=BOTH)
Label(win, text='Hello container world').pack(side=TOP)
Button(win, text='Hello', command=greeting).pack(side=LEFT, fill=Y)
Button(win, text='Quit', command=win.quit).pack(side=RIGHT, expand=YES, fill=X)

win.mainloop()
Beispiel #14
0
def post_run(status_num):
    global root
    notebook.destroy()
    large_font = Font(family="Times", size=14)
    med_font = Font(family="Times", size=12)

    post_run_frame = Frame(root)
    post_run_frame.pack()

    frame = LabelFrame(post_run_frame,
                       padx=5,
                       pady=5,
                       borderwidth=0,
                       highlightthickness=0)
    frame.grid(row=1, column=0, padx=10, pady=(0, 10))

    frame2 = LabelFrame(post_run_frame, padx=5, pady=5)
    frame2.grid(row=2, column=0, padx=20, pady=(0, 10))

    def run_again():
        reset()
        post_run_frame.destroy()
        main_window()

    def show_xlsx(event=None):
        os.system("start \"\" \"" + save_path + "\"")

    def show_error():
        os.system("start \"\" \"" + log_file + "\"")

    if (status_num == 0):
        if autorun_output.get():
            show_xlsx()
        Label(post_run_frame,
              text='Program Finished Successfully!',
              font=large_font).grid(row=0, column=0, padx=10, pady=10)

        Label(frame2, text='Output Location:', font=med_font).grid(row=1,
                                                                   column=0,
                                                                   padx=10,
                                                                   pady=(3, 0))
        save_entry = Entry(frame2, width=90)
        save_entry.grid(row=2, column=0)
        save_entry.insert(0, save_path)
        save_entry.configure(state='readonly')

        Button(frame, text="Exit", command=exit_prog, padx=38,
               pady=2).grid(row=1, column=0, padx=25)
        Button(frame, text="Run Again", command=run_again, padx=26,
               pady=2).grid(row=1, column=1, padx=25)
        Button(frame, text="Open Output", command=show_xlsx, padx=20,
               pady=2).grid(row=1, column=2, padx=25)
    else:
        Button(frame, text="Exit", command=exit_prog, padx=38,
               pady=2).grid(row=1, column=0, padx=2)
        Button(frame, text="Run Again", command=run_again, padx=26,
               pady=2).grid(row=1, column=1, padx=2)
        Button(frame, text="Help", command=help, padx=20,
               pady=2).grid(row=1, column=2, padx=2)
        if (status_num == 2):
            Label(post_run_frame,
                  text='ERROR 2: Bad input file',
                  font=large_font).grid(row=0, column=0, padx=10, pady=10)
        elif (status_num == 3):
            Label(post_run_frame,
                  text='ERROR 3: Bad output file',
                  font=large_font).grid(row=0, column=0, padx=10, pady=10)
        elif (status_num == 4):
            Label(post_run_frame,
                  text='ERROR 4: Bad topic file',
                  font=large_font).grid(row=0, column=0, padx=10, pady=10)
        elif (status_num == 5):
            Label(post_run_frame,
                  text='ERROR 5: Bad subtopic file',
                  font=large_font).grid(row=0, column=0, padx=10, pady=10)
        elif (status_num == 6):
            Label(post_run_frame,
                  text='ERROR 6: Failed reading topic or subtopic',
                  font=large_font).grid(row=0, column=0, padx=10, pady=10)
        elif (status_num == 7):
            Label(post_run_frame,
                  text='ERROR 7: Failed to sort input file',
                  font=large_font).grid(row=0, column=0, padx=10, pady=10)
        elif (status_num == 8):
            Label(post_run_frame,
                  text='ERROR 8: Unsupported file type',
                  font=large_font).grid(row=0, column=0, padx=10, pady=10)
        elif (status_num == 9):
            Label(post_run_frame,
                  text=
                  'ERROR 9: Mismatch Topic and Subtopic files check log file',
                  font=large_font).grid(row=0, column=0, padx=10, pady=10)
            show_error()
        else:
            Label(post_run_frame,
                  text='ERROR 50: Uncaught Exception',
                  font=large_font).grid(row=0, column=0, padx=10, pady=10)

    post_run_frame.bind('<Return>', show_xlsx)
    root.protocol("WM_DELETE_WINDOW", exit_prog)
    post_run_frame.mainloop()
from tkinter import Frame, Label, Entry

form = Frame()
label = Label(form, text='Name')
name_input = Entry(form)
label.grid(row=0, column=0)
name_input.grid(row=1, column=0)

form.pack()
form.mainloop()
Beispiel #16
0
"""
Standalone container subclass example
"""
from tkinter import Frame, Label
from tkinter import RIGHT
from gui7c import HelloPackage  # CHANGED: or get from gui7c--__getattr__ added @UnresolvedImport

frm = Frame()
frm.pack()
Label(frm, text='hello').pack()

part = HelloPackage(frm)
part.pack(side=RIGHT)  # FAILS!--need part.top.pack(side=RIGHT)
frm.mainloop()
def main():
    root = Tk()
    root.columnconfigure(0, weight=1)
    root.rowconfigure(0, weight=1)
    root.geometry('900x600+50+50')
    root.title('Imagepreview Test')

    window = Frame(root)
    window.grid(column=0, row=0, sticky='news')
    window.columnconfigure(0, weight=1)
    window.rowconfigure(0, weight=0)
    window.rowconfigure(1, weight=1)

    topWidget = Label(window, text='Image Preview', font=('Arial', '32'))
    topWidget.grid(column=0, row=0, sticky='we')
    topWidget.columnconfigure(0, weight=1)
    topWidget.rowconfigure(0, weight=1)
    '''************ImagePreview************'''
    previewFrame = Frame(window)
    previewFrame.grid(column=0, row=1, sticky='news')
    previewFrame.columnconfigure(0, weight=1)
    previewFrame.rowconfigure(0, weight=1)

    try:
        testImage = Image.open('test.jpg')
    except:
        testImage = Image.new('RGB', (100, 100), color='#999999')
    preview = Imagepreview.Imagepreview(previewFrame,
                                        testImage,
                                        zoomscale=1.2,
                                        minzoomlevel=0.1,
                                        maxzoomlevel=20.0,
                                        quality=0,
                                        backgroundcolor='#999999')
    preview.grid(column=0, row=0, sticky='news')
    '''************************************'''

    buttonColor = 'gray80'

    controlFrame = Frame(window)
    controlFrame.grid(column=1, row=0, rowspan=3, padx=3)
    previewFrame.rowconfigure(2, weight=0)

    def update_label(event=None):
        infoLabel.config(
            anchor='w',
            text=
            'Scale:\t\tx{}\n\nWidth:\t\t{}\nHeight:\t\t{}\n\nScale width:\t{}\nScale height:\t{}'
            .format(round(preview.canvasScale,
                          2), testImage.width, testImage.height,
                    preview.resizedImage.width, preview.resizedImage.height))

    def reset_button(event=None):
        preview.reset_preview()
        update_label()

    def original_button(event=None):
        preview.original_zoom()
        update_label()

    resetButton = Button(controlFrame,
                         text='Reset Preview (Ctrl+R)',
                         command=reset_button,
                         bg=buttonColor)
    resetButton.grid(column=0, row=0, sticky='we')
    originalButton = Button(controlFrame,
                            text='x1.0 zoom (Num 1)',
                            command=original_button,
                            bg=buttonColor)
    originalButton.grid(column=0, row=1, sticky='we')

    seperatorOne = Separator(controlFrame)
    seperatorOne.grid(column=0, row=2, sticky='we', pady=10)

    infoLabel = Label(controlFrame, anchor='w')
    infoLabel.grid(column=0, row=3, sticky='s')
    infoLabel.config(
        text=
        'Scale:\t\tx{}\n\nWidth:\t\t{}\nHeight:\t\t{}\n\nScale width:\t{}\nScale height:\t{}'
        .format(round(preview.canvasScale,
                      2), testImage.width, testImage.height,
                preview.resizedImage.width, preview.resizedImage.height))

    if os.name == 'nt':
        root.bind('<MouseWheel>', update_label)
    elif os.name == 'posix':
        root.bind('<Button-4>', update_label)
        root.bind('<Button-5>', update_label)
    # root.bind('<MouseWheel>', update_label)
    root.bind('1', original_button)
    root.bind('<Control-r>', reset_button)

    def update_quality(x):
        for child in qualityFrame.winfo_children():
            try:
                child.configure(bg='white', fg='black')
            except:
                pass
        if x == 0:
            qualityZero.configure(bg='gray10', fg='white')
        elif x == 1:
            qualityOne.configure(bg='gray10', fg='white')
        elif x == 2:
            qualityTwo.configure(bg='gray10', fg='white')
        elif x == 3:
            qualityThree.configure(bg='gray10', fg='white')
        elif x == 4:
            qualityFour.configure(bg='gray10', fg='white')
        preview.resizeQuality = x
        preview.scaleChanged = True
        preview.display_image(image=preview.previewImage, quality=x)

    seperatorTwo = Separator(controlFrame)
    seperatorTwo.grid(column=0, row=4, sticky='we', pady=10)

    qualityFrame = Frame(controlFrame)
    qualityFrame.grid(column=0, row=5, sticky='we', padx=30)
    qualityFrame.columnconfigure(0, weight=1)

    qualityLabel = Label(qualityFrame,
                         text='Resize Filter',
                         font=('Arial', '10', 'bold'))
    qualityLabel.grid(column=0, row=0, sticky='we', pady=5)
    qualityZero = Button(qualityFrame,
                         text='0 (NEAREST)',
                         anchor='w',
                         command=lambda: update_quality(0))
    qualityZero.grid(column=0, row=1, sticky='we')
    qualityOne = Button(qualityFrame,
                        text='1 (BILINEAR)',
                        anchor='w',
                        command=lambda: update_quality(1))
    qualityOne.grid(column=0, row=2, sticky='we')
    qualityTwo = Button(qualityFrame,
                        text='2 (HAMMING)',
                        anchor='w',
                        command=lambda: update_quality(2))
    qualityTwo.grid(column=0, row=3, sticky='we')
    qualityThree = Button(qualityFrame,
                          text='3 (BICUBIC)',
                          anchor='w',
                          command=lambda: update_quality(3))
    qualityThree.grid(column=0, row=4, sticky='we')
    qualityFour = Button(qualityFrame,
                         text='4 (LANCZOS)',
                         anchor='w',
                         command=lambda: update_quality(4))
    qualityFour.grid(column=0, row=5, sticky='we')
    update_quality(0)

    seperatorThree = Separator(controlFrame)
    seperatorThree.grid(column=0, row=6, sticky='we', pady=10)

    def load_image():
        try:
            filetypes = [('JPEG', '*.jpg *.jpeg'), ('PNG', '*.png'),
                         ("all files", "*.*")]
            testImage = Image.open(
                askopenfilename(title='Load Image...',
                                defaultextension='.',
                                filetypes=filetypes))
            preview.update_image(image=testImage)
        except AttributeError:
            pass

    loadButton = Button(controlFrame,
                        text='Load Image',
                        font=('Arial', '18'),
                        command=load_image,
                        bg=buttonColor)
    loadButton.grid(column=0, row=7, sticky='we')

    window.update()
    root.minsize(root.winfo_width(), root.winfo_height())
    preview.reset_preview()
    window.mainloop()
class SmartCanvas(Frame):
    """ 
        Usage:

        c = SmartCanvas()

        # add features, for example:
        c.line([0, 0], [1, 1]) 

        c.show()
    """
    def __init__(self, width=500, height=500, background=(224, 224, 224)):

        self.parent = Frame(None)
        self.parent.pack()
        self.width = width
        self.height = height

        Frame.__init__(self, self.parent, width=self.width, height=self.height)

        self.pack_propagate(False)  # not sure why necessary
        self.canvas = Canvas(self,
                             width=self.width,
                             height=self.height,
                             bg="#%02x%02x%02x" % background,
                             highlightthickness=0)
        self.canvas.pack()

        self.transforms = []

        # start off by fixing things so the origin is in
        # the bottom left of screen, and +y is up:
        self.translation(0, self.height)
        self.scaling(1, -1)

    def translation(self, x, y):
        self.transforms.insert(0,
                               ("translation", np.array([x, y]).astype(float)))

    def scaling(self, x, y):
        self.transforms.insert(0, ("scaling", np.array([x, y])))

    def circle(self, center, radius, fill='black'):
        x0 = center[0] - radius
        y0 = center[1] - radius
        x1 = center[0] + radius
        y1 = center[1] + radius

        p1 = self._fix_point([x0, y0])
        p2 = self._fix_point([x1, y1])

        fill = self._fix_fill(fill)
        self.canvas.create_oval(p1[0], p1[1], p2[0], p2[1], fill=fill)

    def line(self, start, end, width=1, fill="black"):
        start = self._fix_point(start)
        end = self._fix_point(end)
        self.canvas.create_line(*start,
                                *end,
                                width=width,
                                fill=self._fix_fill(fill))

    def polygon(self, polygon: Polygon, fill="black"):
        x_coords, y_coords = polygon.exterior.coords.xy
        fixed_coords = []
        for i in range(len(x_coords)):
            x = x_coords[i]
            y = y_coords[i]
            fixed = self._fix_point(np.array([x, y]))
            fixed_coords.append(fixed[0])
            fixed_coords.append(fixed[1])

        fill = self._fix_fill(fill)
        self.canvas.create_polygon(*fixed_coords, fill=fill)

    def show(self):
        self.pack()
        self.parent.mainloop()

    def save(self, name, fileformat=".pdf"):
        self.pack()
        self.canvas.update()

        # delete any existing .ps file of the same name:
        try:
            os.remove(name + ".ps")
            print("Removed a pre-existing file with the same name (" + name +
                  ".ps)")
        except OSError:
            pass

        # write the .ps file and then convert
        #   (must be running Linux (or WSL) with ghostscript installed)
        self.canvas.postscript(file=name + ".ps", colormode='color')
        if fileformat == ".pdf":
            subprocess.run(["ps2pdf", name + ".ps", name + ".pdf"])
        elif fileformat == ".png":
            subprocess.run([
                "gs", "-sDEVICE=png256", "-sOutputFile=" + name + ".png",
                "-r50", "-dBATCH", "-dNOPAUSE", name + ".ps"
            ])
        else:
            print(fileformat + " format not supported.")

        # delete the .ps file:
        os.remove(name + ".ps")
        self.parent.destroy()

    def _fix_point(self, p):

        # ensure we're dealing with an numpy array of floats
        if not isinstance(p, np.ndarray):
            p = np.array(p)
        p = p.astype(float)

        for (transform_type, transform) in self.transforms:
            if transform_type is "translation":
                p += transform
            elif transform_type is "scaling":
                p *= transform
            else:
                raise Exception("Reached invalid transformation: " + transform)
        return p

    def _fix_fill(self, fill):
        if isinstance(fill, tuple):
            fill_tuple = (fill[0], fill[1], fill[2])
            return "#%02x%02x%02x" % fill_tuple
        else:
            return fill
Beispiel #19
0
# label.pack(fill=BOTH)

top.pack()
advancedFrame.pack(anchor="nw", pady=20)

getBtn = Button(top, text="打开", command=getfilepath, width=10)
outBtn = Button(top, text="输出目录", command=outfilepath, width=10)
analyseBtn = Button(top, text="开始", command=go, width=10)

customNameLabel = Label(advancedFrame, text="自定义名称 : ", width=10)
customNameLabel.propagate(False)
customNameLabel.pack(anchor="nw", side="left")
outNameEntry.pack(anchor="ne", side="left")
cutlimitLabel = Label(advancedFrame, text="大小限制 : ")
cutlimitLabel.pack(anchor="nw", side="left")
limitXEntry.pack(anchor="ne", side="left")
Label(advancedFrame, text="X", width=2).pack(anchor="ne", side="left")
limitYEntry.pack(anchor="nw", side="left")

filePathLabel.grid(row=0, column=0)
getBtn.grid(row=0, column=1)
outDictoryLabel.grid(row=1, column=0)
outBtn.grid(row=1, column=1)
analyseBtn.grid(row=3, column=1)
bar.grid(row=3, column=0)

top.mainloop()

# if __name__ == "__main__":
# main()
Beispiel #20
0
def runGUI():

    themeColor = themeChk()

    def buildCountField(index, filterName):
    #
    # Taken from an example by Bryan Oakley at: 
    #                   https://stackoverflow.com/questions/43360921/dont-understand-tkinter-entry-box-validatiom
    #
        def do_validation(enteredValue):
            return enteredValue == "" or enteredValue.isnumeric()

        vcmd = (filterMatrix.register(do_validation), '%P')

        countEntryField.append(StringVar())

        # This is really going to be an integer, but if I set it to integer than the default value 
        # becomes zero and I might want it blank or something else
        countFormVals.append(StringVar()) 
    
        Label(filterMatrix, text=filterName).grid(column=1, row=index + 2)
        countEntryField[index] = Entry(filterMatrix, width=3, validate='key', validatecommand=vcmd, textvariable=countFormVals[index]).grid(column=2, row=index + 2)


    def buildExposureField(index, filterName):
    
        def do_validation(enteredValue):
            return enteredValue == "" or enteredValue.isnumeric()

        vcmd = (filterMatrix.register(do_validation), '%P')

        expEntryField.append(StringVar())

        expFormVals.append(StringVar()) 
    
        Label(filterMatrix, text="x").grid(column=3, row=index + 2)
        expEntryField[index] = Entry(filterMatrix, width=4, validate='key', validatecommand=vcmd, textvariable=expFormVals[index]).grid(column=4, row=index + 2)


    def buildRepeatField(index, filterName):
    
        def do_validation(enteredValue):
            return enteredValue == "" or enteredValue.isnumeric()

        vcmd = (filterMatrix.register(do_validation), '%P')

        repEntryField.append(StringVar())

        repFormVals.append(StringVar()) 
    
        Label(filterMatrix, text="x").grid(column=5, row=index + 2)
        repEntryField[index] = Entry(filterMatrix, width=2, validate='key', validatecommand=vcmd, textvariable=repFormVals[index]).grid(column=6, row=index + 2)

    def writeHeader():
        countHeader = Label(filterMatrix, text="Sets")
        countHeader.grid(column=2, row=1)

        expHeader = Label(filterMatrix, text="Time (s)")
        expHeader.grid(column=4, row=1)

        repHeader = Label(filterMatrix, text="Repeat")
        repHeader.grid(column=6, row=1)

    def end():
        time.sleep(0.5)
        filterMatrix.destroy()
        filterMatrix.quit()


    def buildTargetField():
        def chkTarget(event):
            if targExists(target.get()) == "No":
                targetField.configure(background="red")
                time.sleep(0.5)
            else:
                targetField.configure(background="green")

                TSXSend("sky6ObjectInformation.Property(0)")		

                targText.set(TSXSend("sky6ObjectInformation.ObjInfoPropOut"))

                TSXSend("sky6ObjectInformation.Property(12)")	

                typeText.set(TSXSend("sky6ObjectInformation.ObjInfoPropOut"))

                timeText.set(targRiseSetTimes(target.get(), "30")) 
            
                subButton = Button(targetFrame, text = "OK", bg = "grey", fg = "black")
                subButton.bind("<Button-1>", closeBox)
                subButton.grid(column = 3, row = 5)


        def closeBox(event):
            time.sleep(0.5)
            targetFrame.destroy()
            targetFrame.quit()

                
        Label(targetFrame, text="Target:").grid(column=1, row=1)
        targetField = Entry(targetFrame, width=20, textvariable=target)
        targetField.grid(column=2, row=1)

        window.bind("<Return>", chkTarget)

        chkButton = Button(targetFrame,text = "Check", bg = "grey", fg = "black")
        chkButton.bind("<Button-1>", chkTarget)
        chkButton.grid(column = 3, row = 1)

        targText = StringVar()

        typeText = StringVar()

        timeText = StringVar()

        Label(targetFrame, text=" Verified: ").grid(column=1, row=2)
        Label(targetFrame, textvariable=targText ).grid(column=2, row=2)
        Label(targetFrame, text=" Type: ").grid(column=1, row=3)
        Label(targetFrame, textvariable=typeText ).grid(column=2, row=3)
        Label(targetFrame, text=" Times: ").grid(column=1, row=4)
        Label(targetFrame, textvariable=timeText ).grid(column=2, row=4)


    def closeFocusBox(event):
        time.sleep(0.5)
        focusFrame.destroy()
        focusFrame.quit()

    def askDefGuideTime():    
        def do_validation(enteredValue):
            return enteredValue == "" or enteredValue.isnumeric()

        def closeBox(event):
            time.sleep(0.5)
            guideFrame.destroy()
            guideFrame.quit()

        vcmd = (guideFrame.register(do_validation), '%P')

        Label(guideFrame, text="Initial Guide Exposure: ").grid(column=1, row=1)
        guideField = Entry(guideFrame, width=2, validate='key', validatecommand=vcmd, textvariable=guiderInitExpField).grid(column=2, row=1)
        window.bind("<Return>", closeBox)
        Label(guideFrame, text="s  ").grid(column=3, row=1)

        Label(guideFrame, text="Initial Guide Delay: ").grid(column=1, row=2)
        guideField = Entry(guideFrame, width=2, validate='key', validatecommand=vcmd, textvariable=guiderInitDelayField).grid(column=2, row=2)
        window.bind("<Return>", closeBox)
        Label(guideFrame, text="s  ").grid(column=3, row=2)

        subButton = Button(guideFrame,text = "OK", bg = "grey", fg = "black")
        subButton.bind("<Button-1>", closeBox)
        subButton.grid(column = 4, row = 3)

    def verifySecondCamera():

        def chkCam(event):

            def closeBox(event):
                time.sleep(0.5)
                secondCamFrame.destroy()
                secondCamFrame.quit()

            def abortBox(event):
                useSecondCamera.set("1")
                time.sleep(0.5)
                secondCamFrame.destroy()
                secondCamFrame.quit()
    

            def chkPort(event):
                timeStamp("Checking for remote host.")

                hostFound = os.system("ping -c 1 " + secondCameraIP.get())
                
                if hostFound == 0:
                    timeStamp("Remote host found.")

                    timeStamp("Checking for second SkyX instance.")
                
                    testSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

                    try:
                        testSocket.connect((secondCameraIP.get(), int(secondCameraPort.get())))

                    except ConnectionRefusedError:
                        print("    ERROR: Unable to establish a connection.")
                        print("           Is SkyX running? Is the TCP Server Listening?")
                        secondIPField.configure(background="red")
                        secondIPPort.configure(background="red")

                    else:

                        ipPort = str(secondCameraPort.get())
                        ipAddress = str(secondCameraIP.get())

                        timeStamp("Found Second SkyX instance at: " + ipAddress + ":" + ipPort)

                        camType = TSXSendRemote( ipAddress + ":" + ipPort, "SelectedHardware.cameraModel")
                        if  camType != "<No Camera Selected>":
                            secondIPField.configure(background="green")
                            secondIPPort.configure(background="green")
                            time.sleep(0.5)

                            camDesc.set(camType)

                            chkButton.destroy()
            
                            subButton = Button(secondCamFrame,text = "OK", bg = "grey", fg = "black")
                            subButton.bind("<Button-1>", closeBox)
                            subButton.grid(column = 3, row = 4)

                        else:
                            secondIPField.configure(background="red")
                            secondIPPort.configure(background="red")
                            print("    ERROR: No remote camera selected.")
                else:
                    print("    ERROR: No remote host found.")
                    secondIPField.configure(background="red")
                    secondIPPort.configure(background="red")

	

            if useSecondCamera.get() == 2:

                secondCamLabel.destroy()
                secondCamNButton.destroy()
                secondCamYButton.destroy()

                endButton.destroy()
                
                Label(secondCamFrame, text="IP Address:").grid(column=1, row=1)
                secondIPField = Entry(secondCamFrame, width=16, textvariable=secondCameraIP)
                secondIPField.grid(column=2, row=1)

                Label(secondCamFrame, text="Port:").grid(column=1, row=2)
                secondIPPort = Entry(secondCamFrame, width=16, textvariable=secondCameraPort)
                secondIPPort.grid(column=2, row=2)

                chkButton = Button(secondCamFrame,text = "Check", bg = "grey", fg = "black")
                chkButton.bind("<Button-1>", chkPort)
                chkButton.grid(column = 3, row = 2)

                exButton = Button(secondCamFrame,text="Exit")
                exButton.bind("<Button-1>", abortBox)
                exButton.grid(column = 4, row = 2)

                camDesc = StringVar()

                Label(secondCamFrame, text=" Camera: ").grid(column=1, row=3)
                Label(secondCamFrame, textvariable=camDesc ).grid(column=2, row=3)

            elif useSecondCamera.get() == 1:
                timeStamp("Using local camera only.")
                closeBox("nothing")
            else:
                timeStamp("No camera option identified.")

        secondCamLabel = Label(secondCamFrame, text="Second Camera?")
        secondCamLabel.grid(column=1, row=1)


        secondCamNButton = Radiobutton(secondCamFrame, text="No", variable=useSecondCamera, value=1)
        secondCamNButton.grid(column=2, row=1)
        secondCamYButton = Radiobutton(secondCamFrame, text="Yes", variable=useSecondCamera, value=2)
        secondCamYButton.grid(column=3, row=1)

        endButton = Button(secondCamFrame,text = "OK", bg = "grey", fg = "black")
        endButton.bind("<Button-1>", chkCam)
        endButton.grid(column = 4, row = 1)


    #---[Create master parameter array to pass to run_target-2]------------------------------------------------------------
    outputArray = []
    outputArray.append("GUI_FrontEnd")

    #---[Create main window]-----------------------------------------------------------------------------------------------


    window = Tk()
    window.title("Run Target")

    #
    # Unfortunately, there are some weird issues with
    # button color on Macintosh. 
    #
    if (themeColor == "Traditional"):
        window.tk_setPalette(background="grey91")

    else:
        window.tk_setPalette(background="grey26", foreground="white")


    #---[Validate Target]--------------------------------------------------------------------------------------------------

    window.geometry("350x140")

    target = StringVar()

    targetFrame = Frame()

    buildTargetField()
    targetFrame.pack()
    targetFrame.mainloop()

    timeStamp("Target set to: " + target.get())

    outputArray.append(target.get())

    #---[Ask about guiding]------------------------------------------------------------------------------------------------


    if TSXSend("SelectedHardware.autoguiderCameraModel") == "<No Camera Selected>":
        guiderExposure = "0"
        timeStamp("No guide camera selected.")
    else:
        window.geometry("320x90")
        guiderInitExpField = StringVar()
        guiderInitDelayField = StringVar()
        guideFrame = Frame()
        askDefGuideTime()
        guideFrame.pack()
        guideFrame.mainloop()

    if (guiderInitExpField.get().isnumeric()):
        guiderExposure = guiderInitExpField.get()
        guiderDelay = guiderInitDelayField.get()
        if not guiderDelay:
            guiderDelay = 0

        if guiderExposure == "0":
            timeStamp("Script will run unguided.")
        else:
            timeStamp("Initial Guider Exposure: " + str(guiderExposure))
            timeStamp("Initial Guider Delay: " + str(guiderDelay))
    else:
        writeNote("Bogus Guide Camera Exposure Submitted.")
        print("           Setting initial expousure to five seconds.")
        print("           Setting initial delay to zero seconds.")
        guiderExposure = "5"
        guiderDelay = "0"


    #---[Ask about focusing]-----------------------------------------------------------------------------------------------


    if TSXSend("SelectedHardware.focuserModel") != "<No Focuser Selected>":
        window.geometry("350x100")
        whichFocusRoutine = IntVar()
        focusFrame = Frame()

        Label(focusFrame, text="Which routine for focusing?").grid(column=1, row=1)

        Radiobutton(focusFrame, text="@Focus2", variable=whichFocusRoutine, value=2).grid(column=2, row=2)
        Radiobutton(focusFrame, text="@Focus3", variable=whichFocusRoutine, value=3).grid(column=2, row=3)

        subButton = Button(focusFrame,text = "OK", bg = "grey", fg = "black")
        subButton.bind("<Button-1>", closeFocusBox)
        subButton.grid(column = 3, row = 4)

        focusFrame.pack()
        focusFrame.mainloop()

        if whichFocusRoutine.get() == 2:
            focusStyle = "Two"
            timeStamp("Focus routine set to @Focus2.")
        else:
            focusStyle = "Three"
            timeStamp("Focus routine set to @Focus3.")
    else:
        timeStamp("No focuser selected.")
    

    #---[Filter Matrix code]-----------------------------------------------------------------------------------------------

    camConnect("Imager")

    filters = []
    filters = nameFilters("Local")
    if filters == "None":
        numFilters = 1
        filters = [""]
        
    numFilters = len(filters)

    countEntryField = [] 
    countFormVals = []
    countRealVals = [0] * numFilters

    expEntryField = []
    expFormVals = []
    expRealVals = [0]  * numFilters

    repEntryField = []
    repFormVals = []
    repRealVals = [0]  * numFilters

    filterMatrix = Frame(window)

    window.geometry("400x" + str((numFilters * 28) + 100))

    filterMatrix.pack()

    lCamLabel = Label(filterMatrix, text="Local Camera:")
    lCamLabel.grid(column=0, row=0)

    writeHeader()

    for index,filterName in enumerate(filters):
        buildCountField(index, filterName)
        buildExposureField(index, filterName)
        buildRepeatField(index, filterName)

    endButton = Button(filterMatrix,text = "Submit", bg = "grey", fg = "black",command=end)
    endButton.grid(column = 7, row = len(countEntryField) + 2)

    filterMatrix.mainloop()

    # 
    # This takes the matrix of values from the form
    # and moves them over to a more easily addressable
    # list, which is already pre-populated with zero
    # values as defaults.
    #

    print("     ----------------------------")
    print("     Local Camera Exposure Matrix")
    print("     ----------------------------")

    for index,filterName in enumerate(filters):
        if (expFormVals[index].get().isnumeric()) and (expFormVals[index].get() != "0"): 
            if countFormVals[index].get().isnumeric():
                countRealVals[index] = int(countFormVals[index].get())

        if countRealVals[index] == 0:
            expRealVals[index] = 0
        else:
            if expFormVals[index].get().isnumeric():
                expRealVals[index] = int(expFormVals[index].get())

        if repFormVals[index].get().isnumeric():
            if (countRealVals[index] == 0) or (expRealVals[index] == 0):
                repRealVals[index] = 0
            else:
                repRealVals[index] = int(repFormVals[index].get())
        else:
            if (countRealVals[index] != 0) and (expRealVals[index] != 0):
                repRealVals[index] = 1

        if repRealVals[index] == 0:
            expRealVals[index] = 0
            countRealVals[index] = 0

        print("     " + str(filterName) + ":\t" + str(countRealVals[index]) + "\t" + str(expRealVals[index]) + "\t" + str(repRealVals[index]))

        outputArray.append(str(countRealVals[index]) + "x" + str(expRealVals[index]) + "x" + str(repRealVals[index]))

    print("     ----------------------------")

    #---[Second Camera Code]-----------------------------------------------------------------------------------------------

    window.geometry("450x150")
    useSecondCamera = IntVar()
    secondCameraIP = StringVar()
    secondCameraIP.set("XXX.XXX.XXX.XXX")
    secondCameraPort = StringVar()
    secondCameraPort.set("3040")
    secondCamFrame = Frame()

    verifySecondCamera()
    secondCamFrame.pack()
    secondCamFrame.mainloop()


    if useSecondCamera.get() == 2:


        #---[Second Camera Filter Matrix code]------------------------------------------------------------------------------

        camConnectRemote(str(secondCameraIP.get()) + ":" + str(secondCameraPort.get()), "Imager")

        filters = []
        filters = nameFilters(str(secondCameraIP.get()) + ":" + str(secondCameraPort.get()))
    
        if filters == "None":
            numFilters = 1
            filters = [""]
    
        numFilters = len(filters)

        countEntryField = [] 
        countFormVals = []
        countRealVals = [0] * numFilters

        expEntryField = []
        expFormVals = []
        expRealVals = [0]  * numFilters

        repEntryField = []
        repFormVals = []
        repRealVals = [0]  * numFilters

        filterMatrix = Frame(window)

        window.geometry("405x" + str((numFilters * 28) + 100))

        filterMatrix.pack()

        lCamLabel = Label(filterMatrix, text="Second Camera:")
        lCamLabel.grid(column=0, row=0)

        writeHeader()

        for index,filterName in enumerate(filters):
            buildCountField(index, filterName)
            buildExposureField(index, filterName)
            buildRepeatField(index, filterName)

        endButton = Button(filterMatrix,text = "Submit", bg = "grey", fg = "black",command=end)
        endButton.grid(column = 7, row = len(countEntryField) + 2)

        filterMatrix.mainloop()

        outputArray.append("-r")
        outputArray.append(str(secondCameraIP.get()) + ":" + str(secondCameraPort.get()))

        print("     -----------------------------")
        print("     Remote Camera Exposure Matrix")
        print("     -----------------------------")

        for index,filterName in enumerate(filters):
            if (expFormVals[index].get().isnumeric()) and (expFormVals[index].get() != "0"): 
                if countFormVals[index].get().isnumeric():
                    countRealVals[index] = int(countFormVals[index].get())

            if countRealVals[index] == 0:
                expRealVals[index] = 0
            else:
                if expFormVals[index].get().isnumeric():
                    expRealVals[index] = int(expFormVals[index].get())

            if repFormVals[index].get().isnumeric():
                if (countRealVals[index] == 0) or (expRealVals[index] == 0):
                    repRealVals[index] = 0
                else:
                    repRealVals[index] = int(repFormVals[index].get())
            else:
                if (countRealVals[index] != 0) and (expRealVals[index] != 0):
                    repRealVals[index] = 1

            if repRealVals[index] == 0:
                expRealVals[index] = 0
                countRealVals[index] = 0

            print("     " + str(filterName) + ":\t" + str(countRealVals[index]) + "\t" + str(expRealVals[index]) + "\t" + str(repRealVals[index]))

            outputArray.append(str(countRealVals[index]) + "x" + str(expRealVals[index]) + "x" + str(repRealVals[index]))

        print("     ---------------")

    window.destroy()
    window.quit()


    #---[Dump Array]-------------------------------------------------------------------------------------------------------

    GUIresults = []

    GUIresults.append(outputArray)
    GUIresults.append(str(guiderExposure))
    GUIresults.append(str(guiderDelay))
    GUIresults.append(str(focusStyle))

    return(GUIresults)
Beispiel #21
0
# label.pack(fill=BOTH)

top.pack()
advancedFrame.pack(anchor = "nw", pady = 20)

getBtn = Button(top, text = "打开", command = getfilepath, width = 10)
outBtn = Button(top, text = "输出目录", command = outfilepath, width = 10)
analyseBtn = Button(top, text = "开始", command = go, width = 10)

customNameLabel = Label(advancedFrame, text = "自定义名称 : ", width = 10)
customNameLabel.propagate(False)
customNameLabel.pack(anchor = "nw", side = "left")
outNameEntry.pack(anchor = "ne", side = "left")
cutlimitLabel = Label(advancedFrame, text = "大小限制 : ")
cutlimitLabel.pack(anchor = "nw", side = "left")
limitXEntry.pack(anchor = "ne", side = "left")
Label(advancedFrame, text="X", width = 2).pack(anchor = "ne", side = "left")
limitYEntry.pack(anchor = "nw", side = "left")

filePathLabel.grid(row = 0, column = 0)
getBtn.grid(row = 0, column = 1)
outDictoryLabel.grid(row = 1, column = 0)
outBtn.grid(row = 1, column = 1)
analyseBtn.grid(row = 3, column = 1)
bar.grid(row = 3, column = 0)

top.mainloop()

# if __name__ == "__main__":
# main()
Beispiel #22
0
"""
Frame examplePYTHON3

"""
# from sys import exit
from tkinter import Frame, Button  # get Tk widget classes
from tkinter import LEFT, RIGHT
from gui6 import Hello  # get the subframe class @UnresolvedImport

parent = Frame(None)  # make a container widget
parent.pack()
Hello(parent).pack(side=RIGHT)  # attach Hello instead of running it

Button(parent, text='Attach', command=exit).pack(side=LEFT)
parent.mainloop()