def cityWeatherAction(): #Triggered when "Weather by City" button is pressed cwWindow = Toplevel() cwWindow.geometry("400x400") cwWindow.title('CityWeather') cwWindow.configure(background="light sky blue") global weatherDisplay global cityEntry innerFrame = Frame(cwWindow) outterFrame = Frame(cwWindow) cityLabel = Label(cwWindow) cityEntry = Entry(cwWindow) weatherButton = Button(cwWindow) weatherDisplay = ScrolledText(cwWindow) cityLabel.pack(in_=innerFrame, side=LEFT) #Packs inner Frame cityEntry.pack(in_=innerFrame, side=RIGHT) innerFrame.pack(in_=outterFrame, side=TOP) #Packs outter Frame weatherDisplay.pack(in_=outterFrame, side=BOTTOM) weatherButton.pack(in_=outterFrame, side=BOTTOM) outterFrame.grid(column=0, row=0, padx=3, pady=3) #Places outter Frame outterFrame.configure(background="light sky blue") innerFrame.configure(pady=4, background="light sky blue") weatherButton.configure(width=10, height=1, text="GET WEATHER", command=getCityWeatherAction) #Configures widgets cityLabel.configure(width=7, height=1, text="City", relief=SUNKEN) weatherDisplay.configure(width=45, height=17, pady=3, padx=3)
class GredAboutBox(GatoDialogs.AboutBox): def body(self, master): self.resizable(0,0) self.catIconImage = PhotoImage(data=GatoIcons.gred) self.catIcon = Label(master, image=self.catIconImage) self.catIcon.pack(side=TOP) label = Label(master, text=GatoDialogs.crnotice1) label.pack(side=TOP) label = Label(master, font="Helvetica 10", text=GatoDialogs.crnotice2, justify=CENTER) label.pack(side=TOP) color = self.config("bg")[4] self.infoText = ScrolledText(master, relief=FLAT, padx=3, pady=3, background=color, #foreground="black", wrap='word', width=60, height=12, font="Times 10") self.infoText.pack(expand=0, fill=X, side=BOTTOM) self.infoText.delete('0.0', END) self.infoText.insert('0.0', GatoGlobals.gLGPLText) self.infoText.configure(state=DISABLED) self.title("Gred - About")
def cityForecastAction(): cfWindow = Toplevel() cfWindow.geometry("400x400") cfWindow.title('CityForecast') cfWindow.configure(background="light sky blue") global forecastDisplay global cityFEntry innerFrame = Frame(cfWindow) outterFrame = Frame(cfWindow) cityLabel = Label(cfWindow) cityFEntry = Entry(cfWindow) forecastButton = Button(cfWindow) forecastDisplay = ScrolledText(cfWindow) cityLabel.pack(in_=innerFrame, side=LEFT) # Packs inner Frame cityFEntry.pack(in_=innerFrame, side=RIGHT) innerFrame.pack(in_=outterFrame, side=TOP) # Packs outter Frame forecastDisplay.pack(in_=outterFrame, side=BOTTOM) forecastButton.pack(in_=outterFrame, side=BOTTOM) outterFrame.grid(column=0, row=0, padx=3, pady=3) # Places outter Frame outterFrame.configure(background="light sky blue") innerFrame.configure(pady=4, background="light sky blue") forecastButton.configure( width=11, height=1, text="GET FORECAST", command=getCityForecastAction) # Configures widgets cityLabel.configure(width=7, height=1, text="City", relief=SUNKEN) forecastDisplay.configure(width=45, height=17, pady=3, padx=3)
class GredAboutBox(GatoDialogs.AboutBox): def body(self, master): self.resizable(0, 0) self.catIconImage = PhotoImage(data=GatoIcons.gred) self.catIcon = Label(master, image=self.catIconImage) self.catIcon.pack(side=TOP) label = Label(master, text=GatoDialogs.crnotice1) label.pack(side=TOP) label = Label(master, font="Helvetica 10", text=GatoDialogs.crnotice2, justify=CENTER) label.pack(side=TOP) color = self.config("bg")[4] self.infoText = ScrolledText( master, relief=FLAT, padx=3, pady=3, background=color, #foreground="black", wrap='word', width=60, height=12, font="Times 10") self.infoText.pack(expand=0, fill=X, side=BOTTOM) self.infoText.delete('0.0', END) self.infoText.insert('0.0', GatoGlobals.gLGPLText) self.infoText.configure(state=DISABLED) self.title("Gred - About")
def zipWeatherAction(): zwWindow = Toplevel() zwWindow.geometry("400x400") zwWindow.title('ZipWeather') zwWindow.configure(background="light sky blue") global zipWeatherDisplay global zipEntry innerFrame = Frame(zwWindow) outterFrame = Frame(zwWindow) zipLabel = Label(zwWindow) zipEntry = Entry(zwWindow) weatherButton = Button(zwWindow) zipWeatherDisplay = ScrolledText(zwWindow) zipLabel.pack(in_=innerFrame, side=LEFT) # Packs inner Frame zipEntry.pack(in_=innerFrame, side=RIGHT) innerFrame.pack(in_=outterFrame, side=TOP) # Packs outter Frame zipWeatherDisplay.pack(in_=outterFrame, side=BOTTOM) weatherButton.pack(in_=outterFrame, side=BOTTOM) outterFrame.grid(column=0, row=0, padx=3, pady=3) # Places outter Frame outterFrame.configure(background="light sky blue") innerFrame.configure(pady=4, background="light sky blue") weatherButton.configure(width=10, height=1, text="GET WEATHER", command=getZipWeatherAction) # Configures widgets zipLabel.configure(width=7, height=1, text="Zip Code", relief=SUNKEN) zipWeatherDisplay.configure(width=45, height=17, pady=3, padx=3)
class App(Thread): client = socket() def __init__(self, master): Thread.__init__(self) frame = Frame(master) frame.pack() gframe = Frame(frame) gframe.pack(anchor='w') self.lblserver = Label(gframe, text="IP Server :") self.txtserver = Entry(gframe,width=40) self.lblserver.pack(side=LEFT) self.txtserver.pack(side=LEFT) self.lblport = Label(gframe, text="Port :") self.txtport = Entry(gframe,width=40) self.lblport.pack(side=LEFT) self.txtport.pack(side=LEFT) self.koneksi = Button(gframe, text='Connect', command=self.Connect).pack(side=LEFT) self.gettext = ScrolledText(frame, height=10,width=100) self.gettext.pack() self.gettext.configure(state=DISABLED) sframe = Frame(frame) sframe.pack(anchor='w') self.pro = Label(sframe, text="Client>>") self.sendtext = Entry(sframe,width=80) self.sendtext.focus_set() self.sendtext.bind(sequence="<Return>", func=self.Send) self.pro.pack(side=LEFT) self.sendtext.pack(side=LEFT) def Connect(self): try: self.client.connect((str(self.txtserver.get()), int(self.txtport.get()))) self.gettext.configure(state=NORMAL) self.gettext.insert(END,'Start to Chat\n') self.gettext.configure(state=DISABLED) self.start() except: tkMessageBox.showinfo("Error", "Unconnected") def Send(self, args): self.gettext.configure(state=NORMAL) text = self.sendtext.get() if text=="": text=" " self.gettext.insert(END,'Me >> %s\n'%text) self.sendtext.delete(0,END) self.client.send(text) self.sendtext.focus_set() self.gettext.configure(state=DISABLED) self.gettext.see(END) def run(self): Receive(self.client, self.gettext) def __del__(self): self.client.close()
class AboutBox(tkSimpleDialog.Dialog): """ The application's about box """ def buttonbox(self): # Stolen from tkSimpleDialog.py # add standard button box. override if you don't want the # standard buttons box = Frame(self) w = Button(box, text="OK", width=10, command=self.ok, default=ACTIVE) w.pack(side=RIGHT, padx=5, pady=5) self.bind("<Return>", self.ok) box.pack(side=BOTTOM, fill=X) def body(self, master): self.resizable(0, 0) self.catIconImage = PhotoImage(data=GatoIcons.gato) # statt file= self.catIcon = Label(master, image=self.catIconImage) self.catIcon.pack(side=TOP) label = Label(master, text=crnotice1) label.pack(side=TOP) label = Label(master, font="Helvetica 10", text=crnotice2, justify=CENTER) label.pack(side=TOP) color = self.config("bg")[4] self.infoText = ScrolledText( master, relief=FLAT, padx=3, pady=3, background=color, #foreground="black", wrap='word', width=60, height=12, font="Times 10") self.infoText.pack(expand=0, fill=X, side=BOTTOM) self.infoText.delete('0.0', END) self.infoText.insert('0.0', GatoGlobals.gLGPLText) self.infoText.configure(state=DISABLED) self.title("Gato - About")
class App(Thread): client = socket() client.connect(('localhost', input("Port: "))) def __init__(self, master): Thread.__init__(self) frame = Frame(master) frame.pack() self.gettext = ScrolledText(frame, height=10,width=100) self.gettext.pack() self.gettext.insert(END,'Welcome to Chat\n') self.gettext.configure(state='disabled') sframe = Frame(frame) sframe.pack(anchor='w') self.pro = Label(sframe, text="Client>>"); self.sendtext = Entry(sframe,width=80) self.sendtext.focus_set() self.sendtext.bind(sequence="<Return>", func=self.Send) self.pro.pack(side=LEFT) self.sendtext.pack(side=LEFT) def Send(self, args): self.gettext.configure(state='normal') text = self.sendtext.get() if text=="": text=" " self.gettext.insert(END,'Me >> %s\n'%text) self.sendtext.delete(0,END) self.client.send(text) self.sendtext.focus_set() self.gettext.configure(state='disabled') self.gettext.see(END) def run(self): Receive(self.client, self.gettext)
class App(Thread): server = socket() server.bind(('localhost', input("Port: "))) server.listen(5) client,addr = server.accept() def __init__(self, master): Thread.__init__(self) frame = Frame(master) frame.pack() self.gettext = ScrolledText(frame, height=10,width=100, state=NORMAL) self.gettext.pack() sframe = Frame(frame) sframe.pack(anchor='w') self.pro = Label(sframe, text="Server>>"); self.sendtext = Entry(sframe,width=80) self.sendtext.focus_set() self.sendtext.bind(sequence="<Return>", func=self.Send) self.pro.pack(side=LEFT) self.sendtext.pack(side=LEFT) self.gettext.insert(END,'Welcome to Chat\n') self.gettext.configure(state=DISABLED) def Send(self, args): self.gettext.configure(state=NORMAL) text = self.sendtext.get() if text=="": text=" " self.gettext.insert(END,'Me >> %s \n'%text) self.sendtext.delete(0,END) self.client.send(text) self.sendtext.focus_set() self.gettext.configure(state=DISABLED) self.gettext.see(END) def run(self): Receive(self.client, self.gettext)
class AboutBox(tkSimpleDialog.Dialog): """ The application's about box """ def buttonbox(self): # Stolen from tkSimpleDialog.py # add standard button box. override if you don't want the # standard buttons box = Frame(self) w = Button(box, text="OK", width=10, command=self.ok, default=ACTIVE) w.pack(side=RIGHT, padx=5, pady=5) self.bind("<Return>", self.ok) box.pack(side=BOTTOM,fill=X) def body(self, master): self.resizable(0,0) self.catIconImage = PhotoImage(data=GatoIcons.gato) # statt file= self.catIcon = Label(master, image=self.catIconImage) self.catIcon.pack(side=TOP) label = Label(master, text=crnotice1) label.pack(side=TOP) label = Label(master, font="Helvetica 10", text=crnotice2, justify=CENTER) label.pack(side=TOP) color = self.config("bg")[4] self.infoText = ScrolledText(master, relief=FLAT, padx=3, pady=3, background=color, #foreground="black", wrap='word', width=60, height=12, font="Times 10") self.infoText.pack(expand=0, fill=X, side=BOTTOM) self.infoText.delete('0.0', END) self.infoText.insert('0.0', GatoGlobals.gLGPLText) self.infoText.configure(state=DISABLED) self.title("Gato - About")
class App(Thread): server = socket() server.bind(('localhost', input("Port : "))) server.listen(5) client, addr = server.accept() def __init__(self, master): Thread.__init__(self) frame = Frame(master) frame.pack() self.gettext = ScrolledText(frame, height=10, width=100, state=NORMAL) self.gettext.pack() sframe = Frame(frame) sframe.pack(anchor='w') self.pro = Label(sframe, text="Server>>") self.sendtext = Entry(sframe, width=80) self.sendtext.focus_set() self.sendtext.bind(sequence="<Return>", func=self.Send) self.pro.pack(side=LEFT) self.sendtext.pack(side=LEFT) self.gettext.insert(END, 'Welcome to Chat\n') self.gettext.configure(state=DISABLED) def Send(self, args): self.gettext.configure(state=NORMAL) text = self.sendtext.get() if text == "": text = " " self.gettext.insert(END, 'Me >> %s \n' % text) self.sendtext.delete(0, END) pass_phrase = "" i = 0 while i < 32: a = random.randint(0, 1) pass_phrase += str(a) i += 1 variable = AES() variable.pass_phrase = pass_phrase variable.secret_key = generate_secret_key(pass_phrase) variable.cipher = AESCipher(variable.secret_key) variable.encrypt_text = variable.cipher.encrypt(text) data_string = pickle.dumps(variable) self.client.send(data_string) self.sendtext.focus_set() self.gettext.configure(state=DISABLED) self.gettext.see(END) def run(self): Receive(self.client, self.gettext)
class App(Thread): #Socket client = socket() client.connect(('localhost', input("Port: "))) def __init__(self, master): Thread.__init__(self) frame = Frame(master) frame.pack() self.gettext = ScrolledText(frame, height=10, width=100) self.gettext.pack() self.gettext.insert(END, 'Welcome to Chat\n') self.gettext.configure(state='disabled') sframe = Frame(frame) sframe.pack(anchor='w') self.pro = Label(sframe, text="Client>>") self.sendtext = Entry(sframe, width=80) self.sendtext.focus_set() self.sendtext.bind(sequence="<Return>", func=self.Send) self.pro.pack(side=LEFT) self.sendtext.pack(side=LEFT) def Send(self, args): self.gettext.configure(state='normal') plaintext = self.sendtext.get() # encrypt text = "" for c in plaintext.lower(): if c.isalpha(): text += I2L[(L2I[c] + key) % 26] else: text += c print("cipher text sent :" + text) if text == "": text = " " self.gettext.insert(END, 'Me >> %s\n' % plaintext) self.sendtext.delete(0, END) self.client.send(text) self.sendtext.focus_set() self.gettext.configure(state='disabled') self.gettext.see(END) def run(self): Receive(self.client, self.gettext)
class App(Thread): server = socket() server.bind(('localhost', input("Port: "))) server.listen(5) client, addr = server.accept() def __init__(self, master): Thread.__init__(self) frame = Frame(master) frame.pack() self.gettext = ScrolledText(frame, height=10, width=100, state=NORMAL) self.gettext.pack() sframe = Frame(frame) sframe.pack(anchor='w') self.pro = Label(sframe, text="Server>>") self.sendtext = Entry(sframe, width=80) self.sendtext.focus_set() self.sendtext.bind(sequence="<Return>", func=self.Send) self.pro.pack(side=LEFT) self.sendtext.pack(side=LEFT) self.gettext.insert(END, 'Welcome to Chat\n') self.gettext.configure(state=DISABLED) def Send(self, args): self.gettext.configure(state=NORMAL) text = self.sendtext.get() if text == "": text = " " self.gettext.insert(END, 'Me >> %s \n' % text) self.sendtext.delete(0, END) self.client.send(text) self.sendtext.focus_set() self.gettext.configure(state=DISABLED) self.gettext.see(END) def run(self): Receive(self.client, self.gettext)
class MyTkAppFrame(ttk.Notebook): # the req is a list def cb_task(self, tid, req): L.debug("do task: tid=" + str(tid) + ", req=" + str(req)) reqstr = req[0] resp = self.serv.get_request_block(reqstr) if resp != None: if resp.strip() != "": self.mymailbox.mailbox_serv.put(req[1], resp) def do_stop(self): isrun = False; if self.runth_svr != None: if self.runth_svr.isAlive(): #L.info('signal server to stop ...') self.server.shutdown() #L.info('server close ...') self.server.server_close() #L.info('server closed.') isrun = True if isrun == False: L.info('server is not running. skip') if self.serv != None: self.serv.close() self.serv = None self.btn_svr_start.config(state=tk.NORMAL) self.btn_svr_stop.config(state=tk.DISABLED) #return def do_start(self): import socketserver as ss import neatocmdsim as nsim class ThreadedTCPRequestHandler(ss.BaseRequestHandler): # override base class handle method def handle(self): BUFFER_SIZE = 4096 MAXIUM_SIZE = BUFFER_SIZE * 5 data = "" L.info("server connectd by client: " + str(self.client_address)) mbox_id = self.server.mydata.mailbox_serv.declair() cli_log_head = "CLI" + str(self.client_address) while 1: try: # receive the requests recvdat = self.request.recv(BUFFER_SIZE) if not recvdat: # EOF, client closed, just return L.info(cli_log_head + " disconnected: " + str(self.client_address)) break data += str(recvdat, 'ascii') L.debug(cli_log_head + " all of data: " + data) cntdata = data.count('\n') L.debug(cli_log_head + " the # of newline: %d"%cntdata) if (cntdata < 1): L.debug(cli_log_head + " not receive newline, skip: " + data) continue # process the requests after a '\n' requests = data.split('\n') for i in range(0, cntdata): # for each line: request = requests[i].strip() L.info(cli_log_head + " request [" + str(i+1) + "/" + str(cntdata) + "] '" + request + "'") self.server.serv.request ([request, mbox_id]) response = self.server.mydata.mailbox_serv.get(mbox_id) if response != "": L.debug(cli_log_head + 'send data back: sz=' + str(len(response))) self.request.sendall(bytes(response, 'ascii')) data = requests[-1] except BrokenPipeError: L.error (cli_log_head + 'remote closed: ' + str(self.client_address)) break except ConnectionResetError: L.error (cli_log_head + 'remote reset: ' + str(self.client_address)) break except Exception as e1: L.error (cli_log_head + 'Error in read serial: ' + str(e1)) break L.error (cli_log_head + 'close: ' + str(self.client_address)) self.server.mydata.mailbox_serv.close(mbox_id) # pass the data strcture from main frame to all of subclasses # mailbox_serv, mailbox_servcli class ThreadedTCPServer(ss.ThreadingMixIn, ss.TCPServer): daemon_threads = True allow_reuse_address = True # pass the serv to handler def __init__(self, host_port_tuple, streamhandler, serv, mydata): super().__init__(host_port_tuple, streamhandler) self.serv = serv self.mydata = mydata if self.runth_svr != None: if self.runth_svr.isAlive(): L.info('server is already running. skip') return True L.info('connect to ' + self.conn_port.get()) self.serv = neatocmdapi.NCIService(target=self.conn_port.get().strip(), timeout=0.5) if self.serv.open(self.cb_task) == False: L.error ('Error in open serial') return False L.info('start server ' + self.bind_port.get()) b = self.bind_port.get().split(":") L.info('b=' + str(b)) HOST=b[0] PORT=3333 if len(b) > 1: PORT=int(b[1]) L.info('server is running ...') try: self.server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler, self.serv, self.mymailbox) except Exception as e: L.error("Error in starting service: " + str(e)) return False ip, port = self.server.server_address L.info("server listened to: " + str(ip) + ":" + str(port)) self.runth_svr = Thread(target=self.server.serve_forever) self.runth_svr.setDaemon(True) # When closing the main thread, which is our GUI, all daemons will automatically be stopped as well. self.runth_svr.start() self.btn_svr_start.config(state=tk.DISABLED) self.btn_svr_stop.config(state=tk.NORMAL) L.info('server started.') return True def get_log_text(self): return self.text_log def __init__(self, tk_frame_parent): global config_use_textarea_log ttk.Notebook.__init__(self, tk_frame_parent) nb = self self.runth_svr = None self.serv = None self.serv_cli = None class MyMailbox(object): "mymailbox" def __init__(self): self.mailbox_serv = neatocmdapi.MailPipe() self.mailbox_servcli = neatocmdapi.MailPipe() self.mymailbox = MyMailbox() guilog.rClickbinder(tk_frame_parent) # page for About page_about = ttk.Frame(nb) lbl_about_head = tk.Label(page_about, text=_("About"), font=LARGE_FONT) lbl_about_head.pack(side="top", fill="x", pady=10) lbl_about_main = tk.Label(page_about , font=NORM_FONT , text="\n" + str_progname + "\n" + str_version + "\n" + _("Forward Neato XV control over network") + "\n" + "\n" + _("Copyright © 2015–2016 The nxvForward Authors") + "\n" + "\n" + _("This program comes with absolutely no warranty.") + "\n" + _("See the GNU General Public License, version 3 or later for details.") ) lbl_about_main.pack(side="top", fill="x", pady=10) # page for server page_server = ttk.Frame(nb) lbl_svr_head = tk.Label(page_server, text=_("Server"), font=LARGE_FONT) lbl_svr_head.pack(side="top", fill="x", pady=10) frame_svr = ttk.LabelFrame(page_server, text=_("Setup")) line=0 bind_port_history = ('localhost:3333', '127.0.0.1:4444', '0.0.0.0:3333') self.bind_port = tk.StringVar() lbl_svr_port = tk.Label(frame_svr, text=_("Bind Address:")) lbl_svr_port.grid(row=line, column=0, padx=5, sticky=tk.N+tk.S+tk.W) combobox_bind_port = ttk.Combobox(frame_svr, textvariable=self.bind_port) combobox_bind_port['values'] = bind_port_history combobox_bind_port.grid(row=line, column=1, padx=5, pady=5, sticky=tk.N+tk.S+tk.W) combobox_bind_port.current(0) line += 1 conn_port_history = ('dev://ttyACM0:115200', 'dev://ttyUSB0:115200', 'dev://COM11:115200', 'dev://COM12:115200', 'sim:', 'tcp://localhost:3333', 'tcp://192.168.3.163:3333') self.conn_port = tk.StringVar() lbl_svr_port = tk.Label(frame_svr, text=_("Connect to:")) lbl_svr_port.grid(row=line, column=0, padx=5, sticky=tk.N+tk.S+tk.W) combobox_conn_port = ttk.Combobox(frame_svr, textvariable=self.conn_port) combobox_conn_port['values'] = conn_port_history combobox_conn_port.grid(row=line, column=1, padx=5, pady=5, sticky=tk.N+tk.S+tk.W) combobox_conn_port.current(0) line -= 1 self.btn_svr_start = tk.Button(frame_svr, text=_("Start"), command=self.do_start) self.btn_svr_start.grid(row=line, column=2, padx=5, sticky=tk.N+tk.S+tk.W+tk.E) #self.btn_svr_start.pack(side="right", fill="both", padx=5, pady=5, expand=True) line += 1 self.btn_svr_stop = tk.Button(frame_svr, text=_("Stop"), command=self.do_stop) self.btn_svr_stop.grid(row=line, column=2, padx=5, sticky=tk.N+tk.S+tk.W+tk.E) #self.btn_svr_stop.pack(side="right", fill="both", padx=5, pady=5, expand=True) frame_svr.pack(side="top", fill="x", pady=10) self.text_log = None if config_use_textarea_log: self.text_log = tk.scrolledtext.ScrolledText(page_server, wrap=tk.WORD, height=1) self.text_log.configure(state='disabled') self.text_log.pack(expand=True, fill="both", side="top") #self.text_log.grid(row=line, column=1, columnspan=2, padx=5) self.text_log.bind("<1>", lambda event: self.text_log.focus_set()) # enable highlighting and copying #set_readonly_text(self.text_log, "Version Info\nver 1\nver 2\n") btn_log_clear = tk.Button(page_server, text=_("Clear"), command=lambda: (set_readonly_text(self.text_log, ""), self.text_log.update_idletasks())) #btn_log_clear.grid(row=line, column=0, columnspan=2, padx=5, sticky=tk.N+tk.S+tk.W+tk.E) btn_log_clear.pack(side="right", fill="both", padx=5, pady=5, expand=True) # page for client page_client = ttk.Frame(nb) lbl_cli_head = tk.Label(page_client, text=_("Test Client"), font=LARGE_FONT) lbl_cli_head.pack(side="top", fill="x", pady=10) frame_cli = ttk.LabelFrame(page_client, text=_("Connection")) line=0 client_port_history = ('tcp://192.168.3.163:3333', 'dev://ttyACM0:115200', 'dev://ttyUSB0:115200', 'dev://COM11:115200', 'dev://COM12:115200', 'sim:', 'tcp://localhost:3333') self.client_port = tk.StringVar() lbl_cli_port = tk.Label(frame_cli, text=_("Connect to:")) lbl_cli_port.grid(row=line, column=0, padx=5, sticky=tk.N+tk.S+tk.W) combobox_client_port = ttk.Combobox(frame_cli, textvariable=self.client_port) combobox_client_port['values'] = client_port_history combobox_client_port.grid(row=line, column=1, padx=5, pady=5, sticky=tk.N+tk.S+tk.W) combobox_client_port.current(0) self.btn_cli_connect = tk.Button(frame_cli, text=_("Connect"), command=self.do_cli_connect) self.btn_cli_connect.grid(row=line, column=2, columnspan=1, padx=5, sticky=tk.N+tk.S+tk.W+tk.E) #self.btn_cli_connect.pack(side="left", fill="both", padx=5, pady=5, expand=True) self.btn_cli_disconnect = tk.Button(frame_cli, text=_("Disconnect"), command=self.do_cli_disconnect) self.btn_cli_disconnect.grid(row=line, column=3, columnspan=1, padx=5, sticky=tk.N+tk.S+tk.W+tk.E) #self.btn_cli_disconnect.pack(side="left", fill="both", padx=5, pady=5, expand=True) frame_cli.pack(side="top", fill="x", pady=10) page_command = page_client frame_top = tk.Frame(page_command)#, background="green") frame_bottom = tk.Frame(page_command)#, background="yellow") frame_top.pack(side="top", fill="both", expand=True) frame_bottom.pack(side="bottom", fill="x", expand=False) self.text_cli_command = ScrolledText(frame_top, wrap=tk.WORD) #self.text_cli_command.insert(tk.END, "Some Text\ntest 1\ntest 2\n") self.text_cli_command.configure(state='disabled') self.text_cli_command.pack(expand=True, fill="both", side="top") # make sure the widget gets focus when clicked # on, to enable highlighting and copying to the # clipboard. self.text_cli_command.bind("<1>", lambda event: self.text_cli_command.focus_set()) btn_clear_cli_command = tk.Button(frame_bottom, text=_("Clear"), command=lambda: (set_readonly_text(self.text_cli_command, ""), self.text_cli_command.update_idletasks()) ) btn_clear_cli_command.pack(side="left", fill="x", padx=5, pady=5, expand=False) self.cli_command = tk.StringVar() self.combobox_cli_command = ttk.Combobox(frame_bottom, textvariable=self.cli_command) self.combobox_cli_command['values'] = ('Help', 'GetAccel', 'GetButtons', 'GetCalInfo', 'GetCharger', 'GetDigitalSensors', 'GetErr', 'GetLDSScan', 'GetLifeStatLog', 'GetMotors', 'GetSchedule', 'GetTime', 'GetVersion', 'GetWarranty', 'PlaySound 0', 'Clean House', 'DiagTest MoveAndBump', 'DiagTest DropTest', 'RestoreDefaults', 'SetDistanceCal DropMinimum', 'SetFuelGauge Percent 100', 'SetIEC FloorSelection carpet', 'SetLCD BGWhite', 'SetLDSRotation On', 'SetLED BacklightOn', 'SetMotor VacuumOn', 'SetSchedule Day Sunday Hour 17 Min 0 House ON', 'SetSystemMode Shutdown', 'SetTime Day Sunday Hour 12 Min 5 Sec 25', 'SetWallFollower Enable', 'TestMode On', 'Upload' ) self.combobox_cli_command.pack(side="left", fill="both", padx=5, pady=5, expand=True) self.combobox_cli_command.bind("<Return>", self.do_cli_run_ev) self.combobox_cli_command.bind("<<ComboboxSelected>>", self.do_select_clicmd) self.combobox_cli_command.current(0) btn_run_cli_command = tk.Button(frame_bottom, text=_("Run"), command=self.do_cli_run) btn_run_cli_command.pack(side="right", fill="x", padx=5, pady=5, expand=False) self.check_mid_cli_command() # last nb.add(page_server, text=_("Server")) nb.add(page_client, text=_("Test Client")) nb.add(page_about, text=_("About")) combobox_bind_port.focus() self.do_stop() self.do_cli_disconnect() return # # connection and command: support functions # def do_select_clicmd(self, event): self.combobox_cli_command.select_range(0, tk.END) return # the req is a list def cb_task_cli(self, tid, req): L.debug("do task: tid=" + str(tid) + ", req=" + str(req)) reqstr = req[0] resp = self.serv_cli.get_request_block(reqstr) if resp != None: if resp.strip() != "": self.mymailbox.mailbox_servcli.put(req[1], resp.strip()) return def do_cli_connect(self): self.do_cli_disconnect() L.info('client connect ...') L.info('connect to ' + self.client_port.get()) self.serv_cli = neatocmdapi.NCIService(target=self.client_port.get().strip(), timeout=0.5) if self.serv_cli.open(self.cb_task_cli) == False: L.error ('Error in open serial') return self.mid_cli_command = self.mymailbox.mailbox_servcli.declair(); L.info ('serial opened') self.btn_cli_connect.config(state=tk.DISABLED) self.btn_cli_disconnect.config(state=tk.NORMAL) return def do_cli_disconnect(self): if self.serv_cli != None: L.info('client disconnect ...') self.serv_cli.close() else: L.info('client is not connected, skip.') self.serv_cli = None self.mid_cli_command = -1; self.btn_cli_connect.config(state=tk.NORMAL) self.btn_cli_disconnect.config(state=tk.DISABLED) return def do_cli_run(self): if self.serv_cli == None: L.error('client is not connected, please connect it first!') return L.info('client run ...') reqstr = self.cli_command.get().strip() if reqstr != "": self.serv_cli.request([reqstr, self.mid_cli_command]) return def do_cli_run_ev(self, event): self.do_cli_run() return def check_mid_cli_command(self): if self.serv_cli != None and self.mid_cli_command >= 0: try: resp = self.mymailbox.mailbox_servcli.get(self.mid_cli_command, False) respstr = resp.strip() + "\n\n" # put the content to the end of the textarea guilog.textarea_append (self.text_cli_command, respstr) self.text_cli_command.update_idletasks() except queue.Empty: # ignore pass # setup next self.after(300, self.check_mid_cli_command) return
command=lambda: menu(5)) button5.grid(row=602, column=3, sticky=W, columnspan=1) button6 = Button(app, text="Exit App", font='Lato 20', width=15, bg='blue', fg='red', command=lambda: menu(6)) button6.grid(row=1000, column=1, sticky=N, columnspan=2) # set up the text widget user_view = ScrolledText(app, width=60, height=45, wrap=WORD) user_view.grid(row=0, column=4, rowspan=1000) user_view.configure(state='normal') x = ''' Welcome to the IOT Vulnerability Scanner This is version number 3.1 of the Scanner. This tool has been created as a final year project by the Cybersecurity MSc student Elis Achim. In order to start nay of the tests, please select one of the buttons on the left in order to test your network for vulnerabilities in regards to your IOT devices. For more information about this software as well as step by step instructions on how to use it please click the 'About' button.
def construct(): sample_prog = '''int main (void) { int x; int y; x = (1 + 2) * (3 / 4); y = 1 + 2 * 3 - 4 / 5; return x + y; }''' def callback(): input = inputBox.get(1.0, END) # Lexical tab message, output, tokens = lexical(input) lexTab = tabs['Lexical'] lexTab.configure(state=NORMAL) lexTab.delete(1.0, END) lexTab.insert(INSERT, message + output) lexTab.configure(state=DISABLED) # Syntax tab message, output, root, syn_pass = syntax(tokens) synTab = tabs['Syntax'] synTab.configure(state=NORMAL) synTab.delete(1.0, END) synTab.insert(INSERT, message + output) synTab.configure(state=DISABLED) # Semantics tab if syn_pass: message = semantic(root) else: message = "Couldn't perform semantic analysis" semTab = tabs['Semantics'] semTab.configure(state=NORMAL) semTab.delete(1.0, END) semTab.insert(INSERT, message) semTab.configure(state=DISABLED) master = Tk() master.title("C- Compiler") # Frames buttonFrame = Frame(master) buttonFrame.grid(row=1, column=1) # Labels Label(master, text="Input").grid(row=0, column=0) Label(master, text="Output").grid(row=0, column=1) # Buttons compileButton = Button(buttonFrame, text='Compile', command=callback) compileButton.grid(row=0, column=0) # Text Boxes inputBox = ScrolledText(master, width=50, height=40) inputBox.grid(row=2, column=0) inputBox.insert(INSERT, sample_prog) # Notebook to hold tabs notebook = ttk.Notebook(master) notebook.grid(row=2, column=1) tabs = {"Lexical": [], "Syntax": [], "Semantics": []} tab_order = ["Lexical", "Syntax", "Semantics"] for tabname in tab_order: tab = ScrolledText(notebook, width=50, height=40) tab.configure(state=DISABLED) tabs[tabname] = tab notebook.add(tab, text=tabname) master.mainloop()
class OcsGenericEntityGui(Frame): # + # __init__ method # - def __init__(self, parent=None, system='', entity='', standalone=True): # get arguments self._parent = parent self._system = system self._entity = entity self._standalone = standalone # declare some variables and initialize them self._device = None self._parameter = None self._startid = None self._value = None self.result = None # create an instance of this generic entity self._this = OcsGenericEntity(self._system, self._entity, False) # now add the GUI stuff Frame.__init__(self, self._parent, bd=1, relief=SUNKEN, bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR)) Label(self._parent, text='{0:s} {1:s}'.format(self._system, self._entity), foreground='blue', bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), font=('helvetica', 12, 'normal')).grid(row=0, sticky=NSEW) # Label(self._parent, text=self._entity, foreground='blue', bg=ocsGenericEntityBackgroundColour.get( # self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), # font=('helvetica', 12, 'bold')).grid(row=1, sticky=NSEW) self.create_generic_buttons(self._parent, self._system) # Add text widget to display logging info self._st = ScrolledText(self._parent, state='disabled') self._st.configure(font='TkFixedFont') self._st.grid(column=0, row=1, sticky='w', columnspan=1) self._th = OcsTextHandler(self._st) # Add the handler to logger self._this.logger.addHandler(self._th) self._simFlag = BooleanVar() self._simFlag.set(False) self._this._simulate = self._simFlag.get() # self._this.logger.debug("self._this._simulate = {0:d}".format(self._this._simulate)) self.sim_widget = Checkbutton(self._parent, text='SIMULATION', variable=self._simFlag, height=2) self.sim_widget.config(fg='black', bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), font=('helvetica', 10, 'roman')) self.sim_widget.grid(row=2, sticky=NSEW) self._simFlag.trace('w', self.sim_change) self._simFlag.set(True) Label(self._parent, text='Generic Commands', foreground='blue', bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), font=('helvetica', 10, 'italic')).grid(row=3, sticky=NSEW) Label(self._parent, text='Business Logic Commands', foreground='blue', bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), font=('helvetica', 10, 'italic')).grid(row=11, sticky=NSEW) Label(self._parent, text='Behavioural Commands', foreground='blue', bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), font=('helvetica', 10, 'italic')).grid(row=14, sticky=NSEW) if self._standalone: OcsQuitButton(self._parent).grid(row=23, sticky=NSEW) # + # (trace) method(s) # - def sim_change(self, *args): self._this.logger.debug("args = {0:s}".format(str(args))) simflag = self._simFlag.get() self._this._simulate = simflag if simflag: self.sim_widget.config(bg='#ff4040', font=('helvetica', 12, 'bold')) else: self.sim_widget.config(bg="#00ee00", font=('helvetica', 12, 'roman')) # self._this.logger.debug("self._this._simulate = {0:d}".format(self._this._simulate)) # + # (deferred) methods() # - def get_command_dialog_string(self, name=''): s = 'generic command dialog box' for e1 in self._this.generic_help: t = e1.split() if t[0].lower() == name.lower(): return e1 return s # + # (command) methods() # - def abort_handler(self): if self._this: self._this.abort() def disable_handler(self): if self._this: self._this.disable() def enable_handler(self): if self._this: self._this.enable() def entercontrol_handler(self): if self._this: self._this.entercontrol() def exitcontrol_handler(self): if self._this: self._this.exitcontrol() def setvalue_handler(self): OcsEntryDialog(self, self.get_command_dialog_string('setvalue'), ['Parameter', 'Value']) if self._this: if self.result: self._parameter = self.result['Parameter'] self._value = self.result['Value'] self._this.logger.debug( "calling self._this.setvalue('{0:s}', '{1:s}')".format( str(self._parameter), str(self._value))) self._this.setvalue(parameter=self._parameter, value=self._value) else: self._parameter = '' self._value = '' self._this.logger.debug( "self._this.setvalue('{0:s}', '{1:s}') cancelled".format( str(self._parameter), str(self._value))) def standby_handler(self): if self._this: self._this.standby() def start_handler(self): OcsEntryDialog(self, self.get_command_dialog_string('start'), ['StartId']) if self._this: if self.result: self._startid = self.result['StartId'] self._this.logger.debug( "calling self._this.start('{0:s}')".format( str(self._startid))) self._this.start(startid=self._startid) else: self._startid = '' self._this.logger.debug( "self._this.start('{0:s}') cancelled".format( str(self._startid))) def stop_handler(self): OcsEntryDialog(self, self.get_command_dialog_string('stop'), ['Device']) if self._this: if self.result: self._device = self.result['Device'] self._this.logger.debug( "calling self._this.stop('{0:s}')".format(str( self._device))) self._this.stop(device=self._device) else: self._device = '' self._this.logger.debug( "self._this.stop('{0:s}') cancelled".format( str(self._device))) # + # createGenericButtons() method # - def create_generic_buttons(self, _parent=None, system=''): self._parent = _parent self._system = system for e2 in self._this.generic_help: t = e2.split() tl = t[0].lower() if tl == 'abort': widget = Button(self._parent, text=t[0], bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), command=self.abort_handler, font=('helvetica', 12, 'normal'), state=NORMAL) widget.grid(row=12, sticky=NSEW) elif tl == 'disable': widget = Button(self._parent, text=t[0], bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), command=self.disable_handler, font=('helvetica', 12, 'normal'), state=NORMAL) widget.grid(row=4, sticky=NSEW) elif tl == 'enable': widget = Button(self._parent, text=t[0], bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), command=self.enable_handler, font=('helvetica', 12, 'normal'), state=NORMAL) widget.grid(row=5, sticky=NSEW) elif tl == 'entercontrol': widget = Button(self._parent, text=t[0], bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), command=self.entercontrol_handler, font=('helvetica', 12, 'normal'), state=NORMAL) widget.grid(row=6, sticky=NSEW) elif tl == 'exitcontrol': widget = Button(self._parent, text=t[0], bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), command=self.exitcontrol_handler, font=('helvetica', 12, 'normal'), state=NORMAL) widget.grid(row=7, sticky=NSEW) elif tl == 'setvalue': widget = Button(self._parent, text=t[0], bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), command=self.setvalue_handler, font=('helvetica', 12, 'normal'), state=NORMAL) widget.grid(row=8, sticky=NSEW) elif tl == 'start': widget = Button(self._parent, text=t[0], bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), command=self.start_handler, font=('helvetica', 12, 'normal'), state=NORMAL) widget.grid(row=9, sticky=NSEW) elif tl == 'standby': widget = Button(self._parent, text=t[0], bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), command=self.standby_handler, font=('helvetica', 12, 'normal'), state=NORMAL) widget.grid(row=10, sticky=NSEW) elif tl == 'stop': widget = Button(self._parent, text=t[0], bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), command=self.stop_handler, font=('helvetica', 12, 'normal'), state=NORMAL) widget.grid(row=13, sticky=NSEW) else: pass for e3 in range(15, 23): widget = Button(self._parent, text='-', bg=ocsGenericEntityBackgroundColour.get( self._system, OCS_GENERIC_ENTITY_BACKGROUND_COLOUR), font=('helvetica', 12, 'normal'), state=DISABLED) widget.grid(row=e3, sticky=NSEW)
def OnDoubleClick(event, param): global fileview_l if len(fileview_l) > 0: fileview_l[0].destroy() item = treeview_l[param].selection()[0] filename = treeview_l[param].item(item, "text") linenumber = treeview_l[param].item(item, "values") fileview = Toplevel() fileview.title(target_path) fileview.geometry("700x560+450+450") fileview_l.append(fileview) filename_text = Text(fileview, state='normal', height=2, width=100, bg='#f5f5f0') filename_text.pack() filename_text.tag_configure('color3', background='#0077b3', foreground='#ffffff', font=('Verdana', 12, 'bold'), justify=CENTER) filename_text.tag_configure('color2', background='#808000', foreground='#ffffff', font=('Verdana', 9, 'bold')) filename_text.insert(END, filename + "\n", 'color3') if len(linenumber[1]) > 90: firstpart = linenumber[1][0:90] secondpart = ' - ' + linenumber[1][90:len(linenumber[1]) - 1] else: firstpart = linenumber[1] secondpart = '' filename_text.insert(END, " Reason: " + firstpart + "\n", 'color2') filename_text.insert(END, secondpart, 'color2') filename_text.configure(state='disabled') style_text = Text(fileview, state='normal', height=35, width=2, bg='#808080') style_text.pack(side=LEFT) #fileview_text.tag_configure('color1', background='#808080',foreground='#808080', font=('Verdana', 9, 'bold')) fileview_text = ScrolledText(fileview, state='normal', height=35, width=100, bg='#FFFCFC') fileview_text.pack(side=LEFT) fileview_text.tag_configure('big1', font=('Verdana', 11, 'bold'), justify=CENTER) fileview_text.tag_configure('big0', font=('Verdana', 10, 'bold')) fileview_text.tag_configure('big2', font=('Verdana', 9, 'bold')) fileview_text.tag_configure('big', font=('Verdana', 7)) fileview_text.tag_configure('color', background='#b30000', foreground='#ffffff', font=('Verdana', 8, 'bold')) #fileview_text.add_separator() fileview_text.insert(END, "\n", 'color2') #fileview_text.insert(END, "\n", 'big0') i = 1 with open(target_path, 'r') as f: for line in f: if str(i) == linenumber[0]: #fileview_text.insert(END, ".> ", 'color1') fileview_text.insert(END, str(i) + "" + ".> ", 'color') fileview_text.insert(END, line, 'color') else: #fileview_text.insert(END, ".> ", 'color1') fileview_text.insert(END, str(i) + "" + ".> ", 'big') fileview_text.insert(END, line, 'big') #style_text.insert(END, " "+ str(i)+".> ", 'big') i += 1 f.close() #fileview_text.insert(END, ".> ", 'color1') # create a popup menu popmenu = Menu(fileview) popmenu.add_command(label="Undo", command=save) popmenu.add_command(label="Redo", command=save) # attach popup to frame fileview_text.bind("<Button-3>", functools.partial(popup, param=popmenu)) fileview_text.configure(state='disabled')
class GUI(): def __init__(self, player): self.window = Tk() self.window.title("Pong-Hau-Ki") self.player = player self.main_frame = Frame(self.window) self.main_frame.pack() self.game_frame = Frame(self.main_frame, width=400, height=400) self.game_frame.pack() self.action_frame = Frame(self.main_frame) self.action_frame.pack() self.chat_frame = Frame(self.main_frame) self.chat_frame.pack(side=BOTTOM) self.setup_game_lines() self.setup_game_buttons() self.setup_action_text_field() self.setup_action_button() self.setup_text_box() self.setup_text_field() self.setup_send_button() self.window.protocol("WM_DELETE_WINDOW", self.on_closing) self.player.setup_gui(self) self.window.mainloop() def setup_game_buttons(self): self.left_up_button = Button(self.game_frame, text="", command=lambda: self.send_button_click(0)) self.left_up_button.place(x=25, y=25, height=50, width=50) self.right_up_button = Button( self.game_frame, text="", command=lambda: self.send_button_click(1)) self.right_up_button.place(x=300, y=25, height=50, width=50) self.center_button = Button(self.game_frame, text="", command=lambda: self.send_button_click(2)) self.center_button.place(x=162, y=113, height=50, width=50) self.left_bottom_button = Button( self.game_frame, text="", command=lambda: self.send_button_click(3)) self.left_bottom_button.place(x=25, y=200, height=50, width=50) self.right_bottom_button = Button( self.game_frame, text="", command=lambda: self.send_button_click(4)) self.right_bottom_button.place(x=300, y=200, height=50, width=50) def setup_game_lines(self): self.canvas = Canvas(self.game_frame) self.canvas.create_line(75, 75, 300, 200) self.canvas.create_line(300, 75, 75, 200) self.canvas.create_line(50, 50, 50, 225) self.canvas.create_line(325, 50, 325, 225) self.canvas.create_line(50, 225, 325, 225) self.canvas.pack() def setup_action_text_field(self): self.action_text_field = Label(self.action_frame, text="Press Start!") self.action_text_field.pack(side=TOP) def setup_action_button(self): self.action_button = Button(self.action_frame, text="Start", command=self.send_action_message) self.action_button.pack(side=BOTTOM) def setup_send_button(self): self.send_button = Button(self.chat_frame, text="Send", command=lambda: self.send_chat_message([])) self.send_button.pack(side=RIGHT) def setup_text_field(self): self.text_field = Entry(self.chat_frame, width=80) self.text_field.focus_set() self.text_field.bind(sequence="<Return>", func=self.send_chat_message) self.text_field.pack(side=LEFT) def setup_text_box(self): self.text_box = ScrolledText(self.main_frame, height=10, width=100) self.text_box.configure(state='disabled') self.text_box.pack(side=TOP) def disable_game_buttons(self): self.left_up_button['state'] = 'disable' self.right_up_button['state'] = 'disable' self.center_button['state'] = 'disable' self.left_bottom_button['state'] = 'disable' self.right_bottom_button['state'] = 'disable' def enable_game_buttons(self): self.left_up_button['state'] = 'normal' self.right_up_button['state'] = 'normal' self.center_button['state'] = 'normal' self.left_bottom_button['state'] = 'normal' self.right_bottom_button['state'] = 'normal' def update_text_box(self, message): self.text_box.configure(state='normal') self.text_box.insert(END, 'Oponent >> %s\n' % message) self.text_box.configure(state='disabled') self.text_box.see(END) def update_game_buttons_color(self, colors): self.left_up_button['bg'] = colors[0] self.right_up_button['bg'] = colors[1] self.center_button['bg'] = colors[2] self.left_bottom_button['bg'] = colors[3] self.right_bottom_button['bg'] = colors[4] def update_action_button(self, message): self.action_button["text"] = message def update_action_text_field(self, message): self.action_text_field["text"] = message def show_error_message(self, message): tkMessageBox.showerror("Error", message) def send_chat_message(self, args): self.text_box.configure(state='normal') text = self.text_field.get() if text != "": self.text_box.insert(END, 'Me >> %s\n' % text) self.text_field.delete(0, END) self.player.send_chat_message(text) self.text_field.focus_set() self.text_box.configure(state='disabled') self.text_box.see(END) def send_action_message(self): self.player.action_button_pressed() def send_button_click(self, button_number): self.player.game_button_pressed(button_number) def on_closing(self): self.player.close_button_pressed()
def __init__(self, master=None): Frame.__init__(self, master) # self.master.title("[JIMAP]") self.master.minsize(300, 300) self.master.maxsize(2000, 2000) self.master.geometry("1000x600") # window size self.mode = "{0}".format("Select") self.zoom_level = Jimapn.MIN_ZOOM_LEVEL self.latitude = 35.43134 self.longitude = 139.26086 self.aaom_x = 0 self.aaom_y = 0 self.map_area = [['' for i in xrange(Jimapn.CANVAS_X)] for j in xrange(Jimapn.CANVAS_Y)] # self.print_map = [[ '' for i in xrange(Jimapn.CANVAS_X)] for j in xrange(Jimapn.CANVAS_Y)] self.cid = [['' for i in xrange(Jimapn.CANVAS_X)] for j in xrange(Jimapn.CANVAS_Y)] for i in xrange(Jimapn.CANVAS_X): for j in xrange(Jimapn.CANVAS_Y): self.map_area[i][j] = { "img_file_path": "", "img_file": "", } # ## Layout # Menu menubar = Menu(self) files = Menu(menubar, tearoff=False) menubar.add_cascade(label="Files", underline=0, menu=files) exit = Menu(menubar, tearoff=False) menubar.add_cascade(label="Exit", underline=0, menu=exit) exit.add_command(label="Exit", underline=0, command=sys.exit) self.master.configure(menu=menubar) # # Left side left_side_frame = LabelFrame(self) left_side_frame.configure(labelanchor="nw", text="layer", relief="groove") left_side_frame.grid(row=0, column=0, padx=1, pady=1, sticky="W") # display my place point myplace_display = ScrolledText(left_side_frame) myplace_display.configure( height=4, width=20, ) myplace_display.grid(row=0, column=0, padx=1, pady=5) # # Center center_frame = Frame(self) center_frame.configure(relief="raised") center_frame.grid(row=0, column=1, sticky="W" + "E" + "N" + "S") # Top # # search place input self.search_place_text = StringVar() self.search_place = Entry(center_frame) self.bind_search_place() self.search_place.configure(width=50, relief="sunken", textvariable=self.search_place_text) self.search_place.grid(row=0, column=0, padx=5, pady=5) # search button self.search_button = Button(center_frame) self.search_button.configure( foreground="#3f3f3f", background="#cfcfcf", text="Search", cursor="arrow", command=self.search_place_start, ) self.search_button.grid(row=0, column=1, padx=5, pady=5) # Draw maps self.print_map = Canvas(center_frame) self.bind_canvas() self.print_map.configure(height=Jimapn.DISPLAY_CANVAS_HEIGHT, width=Jimapn.DISPLAY_CANVAS_WIDTH, scrollregion=("0", "0", Jimapn.CANVAS_WIDTH, Jimapn.CANVAS_HEIGHT)) self.print_map.grid(row=1, column=0, sticky="W" + "E" + "N" + "S") self.xscroll = Scrollbar(center_frame) self.xscroll.configure( orient="horizontal", background="#0f0f0f", activebackground="#0f0f0f", highlightbackground="#0f0f0f", troughcolor="#2f8fff", relief="groove", activerelief="flat", width=10, command=self.print_map.xview, ) self.xscroll.grid(row=2, column=0, sticky="E" + "W") self.yscroll = Scrollbar(center_frame) self.yscroll.configure( orient="vertical", command=self.print_map.yview, ) self.yscroll.grid(row=1, column=1, sticky='N' + 'S') self.print_map.config(xscrollcommand=self.xscroll.set, yscrollcommand=self.yscroll.set) center_frame.grid_rowconfigure(0, weight=1, minsize=0) center_frame.grid_columnconfigure(0, weight=1, minsize=0) # # Right side right_side_frame = LabelFrame(self) right_side_frame.configure(labelanchor="nw", text="tools", relief="groove") right_side_frame.grid(row=0, column=2) # select button select_button = Button(right_side_frame) select_button.configure(foreground="#3f3f3f", background="#cfcfcf", text="➩", cursor="man") select_button.grid(row=0, column=0, padx=5, pady=5) # draw button draw_button = Button(right_side_frame) draw_button.configure(foreground="#3f3f3f", background="#cfcfcf", text="✎", cursor="pencil") draw_button.grid(row=0, column=1, padx=5, pady=5) # Map zoom zoom_in_button = Button(right_side_frame) zoom_in_button.configure(foreground="#5f5f5f", background="#ffffff", text="+", relief="groove", command=lambda: self.scale_change(1)) zoom_in_button.grid(row=10, column=0, padx=5, pady=5) print_zoom_level = Label(right_side_frame) self.zoom_level_label = StringVar() self.zoom_level_label.set(self.zoom_level) print_zoom_level.configure(width=2, textvariable=self.zoom_level_label, foreground="#cfcfcf", background="#0f0f0f", relief="groove") print_zoom_level.grid(row=11, column=0, padx=5, pady=5) zoom_out_button = Button(right_side_frame) zoom_out_button.configure(foreground="#5f5f5f", background="#ffffff", text="-", relief="groove", command=lambda: self.scale_change(-1)) zoom_out_button.grid(row=12, column=0, padx=5, pady=5) # # Bottom bottom_frame = LabelFrame(self) bottom_frame.configure(bg="#efefef", labelanchor="nw", text="debug space", relief="ridge") bottom_frame.grid(row=1, column=1, padx=10, pady=10) # print mode self.mode_print = Label(bottom_frame) self.mode_print.configure(foreground="#5f5f5f", background="#dfdfdf", height=1, width=10, relief="groove", text="{0}".format(self.mode)) self.mode_print.grid(row=1, column=0, padx=5, pady=5) # print mouse cursor postion self.print_xy = Label(bottom_frame) self.print_xy.configure(foreground="#5f5f5f", background="#dfdfdf", height=1, width=25, relief="groove") self.print_xy.grid(row=1, column=1, padx=5, pady=5) # print log # # log print space font = tkFont.Font(family="Consolas", size=10) self.log_place = ScrolledText(bottom_frame) self.log_place.configure( foreground="#5f5f5f", background="#dfdfdf", selectforeground="#cfcfcf", selectbackground="#2f2f8f", height=5, width=50, relief="sunken", font=font, ) self.log_place.grid(row=0, column=1, padx=5, pady=5) self.log_place.insert("end", "zoom_level : {0}\n".format(self.zoom_level)) self.log_place.see("end") self.map_draw(latitude=self.latitude, longitude=self.longitude) self.show_place() # right click menu self.right_click_menu = Menu(self.print_map, tearoff=False) place_recode = Menu(self.right_click_menu) self.right_click_menu.add_cascade(label=u"場所", menu=place_recode, under=2) place_recode.add_command(label=u"この場所を登録", underline=1, command=self.recode_place) exit_menu = Menu(self.right_click_menu) self.right_click_menu.add_cascade(label=u"終了", underline=0, menu=exit_menu) exit_menu.add_command(label=u"終了", underline=1, command=sys.exit)
class EditorMain(object): def __init__(self): self.root = tk.Tk(className="PyNestML IDE") self.after_id = None self.text_frame = tk.Frame(self.root, width=self.root.winfo_screenwidth(), height=self.root.winfo_screenheight() * 0.70) self.text_frame.pack_propagate(False) self.textPad = ScrolledText(self.text_frame, height=1, width=1, undo=True) self.textPad.pack(side="top", fill="both", expand=True) self.text_frame.pack(side="top", fill="both", expand=True) self.line_nr_frame = tk.Frame(self.root, width=self.root.winfo_screenwidth()) self.line_nr_frame.pack_propagate(False) self.line_nr = tk.Text(self.root, width=self.root.winfo_screenwidth(), height=1) self.line_nr.pack(side="top", fill="both", expand=True) self.line_nr_frame.pack(side="top", fill="both", expand=True) self.console_frame = tk.Frame(self.root, width=self.root.winfo_screenwidth(), height=self.root.winfo_screenheight() * 0.20) self.console_frame.pack_propagate(False) self.console = ScrolledText(self.console_frame, width=1, height=1) self.console.pack(side="top", fill="both", expand=True) self.console_frame.pack(side="top", fill="both", expand=True) self.menu = Menu(root=self.root, text_pad=self.textPad, editor=self) self.highlighter = Highlighter(self.textPad, self) # insert empty model self.textPad.insert('1.0', 'PyNestML \n') self.textPad.insert('2.0', ' Model \n') self.textPad.insert('3.0', ' Editor\n') self.textPad.tag_add("l1", "%s.%s" % (1, 0), "%s.%s" % (1, len('PyNestML'))) self.textPad.tag_add("l2", "%s.%s" % (2, 0), "%s.%s" % (2, len(' Model'))) self.textPad.tag_add("l3", "%s.%s" % (3, 0), "%s.%s" % (3, len(' Editor'))) self.textPad.tag_config("l1", background="white", foreground="blue") self.textPad.tag_config("l2", background="white", foreground="red") self.textPad.tag_config("l3", background="white", foreground="green") self.last = self.textPad.get('0.0', tk.END) # insert start position of cursor self.console.pack(side=tk.BOTTOM) self.console.configure(state='disabled') self.line_nr.insert('1.0', 'Position: 0:0') self.line_nr.configure(state='disabled') # bind keys self.bind_keys() self.root.mainloop() def change_button_state(self, active=True): if not active: self.menu.modelmenu.entryconfig('Check CoCos', state=tk.DISABLED) self.menu.modelmenu.entryconfig('Compile Model', state=tk.DISABLED) else: self.menu.modelmenu.entryconfig('Check CoCos', state=tk.NORMAL) self.menu.modelmenu.entryconfig('Compile Model', state=tk.NORMAL) def exit_editor(self, _): self.menu.exit_command() def store_command(self, _): self.menu.save_command() def check_model(self): self.change_button_state(False) thread = threading.Thread(target=self.check_model_in_separate_thread) thread.start() return thread # returns immediately after the thread starts def check_model_in_separate_thread(self): self.textPad.configure(state='disabled') ModelChecker.check_model_with_cocos(self.textPad.get('0.0', tk.END)) self.report_findings() self.textPad.configure(state='normal') def check_syntax_in_separate_thread(self): ModelChecker.check_model_syntax(self.textPad.get('0.0', tk.END)) self.report_findings() def check_model_syntax(self, _): self.update_line_number() # cancel the old job if self.after_id is not None: self.textPad.after_cancel(self.after_id) # create a new job self.after_id = self.textPad.after(800, self.do_check_model_syntax) def do_check_model_syntax(self): if self.textPad.get('0.0', tk.END) != self.last: if self.last is None or "".join( self.textPad.get('0.0', tk.END).split()) != "".join( self.last.split()): thread = threading.Thread( target=self.check_syntax_in_separate_thread) thread.start() self.last = self.textPad.get('0.0', tk.END) return thread # returns immediately after the thread starts def update_line_number(self): self.line_nr.configure(state='normal') self.line_nr.delete('1.0', tk.END) pos = self.textPad.index(tk.INSERT).split('.') self.line_nr.insert('1.0', 'Position: %s:%s' % (pos[0], pos[1])) self.line_nr.configure(state='disabled') def report_findings(self): # print('process complete!') self.highlighter.process_report() self.change_button_state(True) def bind_keys(self): # bind the events self.textPad.bind('<Control-q>', self.exit_editor) self.textPad.bind('<KeyRelease>', self.check_model_syntax) self.textPad.bind('<Control-s>', self.store_command) def clear_console(self): self.console.delete('1.0', tk.END) def report(self, text): if self.menu.show_syntax_errors_var.get() == 1: self.console.configure(state='normal') self.console.insert(tk.END, text + '\n') self.console.configure(state='disabled') def inc_font_size(self): f = tkFont.Font(self.textPad, self.textPad.cget('font')) self.textPad.configure(font=("Courier", f.configure()['size'] + 1)) def dec_font_size(self): f = tkFont.Font(self.textPad, self.textPad.cget('font')) if not f.configure()['size'] - 1 < 4: self.textPad.configure(font=("Courier", f.configure()['size'] - 1))
import sys v = sys.version from Tkinter import * import tkFileDialog from ScrolledText import * root = Tk("Text Editor") text = ScrolledText(root) # add some color fam text.configure(background='black') text.configure(insertbackground='green') text.configure(foreground='green') text.configure(font=("Courier", 12)) text.grid() # Saving a file def saveas(): global text t = text.get("1.0", "end-1c") #savelocation = raw_input("> ") savelocation = tkFileDialog.asksaveasfilename() file1 = open(savelocation, "w+") file1.write(t) file1.close() # Open a file function
class App(Thread): server = socket() print("SERVER") server.bind((input("IP Client: "), input("Port: "))) server.listen(5) client, addr = server.accept() def __init__(self, master): Thread.__init__(self) frame = Frame(master) frame.pack() self.gettext = ScrolledText(frame, height=10, width=100, state=NORMAL) self.gettext.pack() sframe = Frame(frame) sframe.pack(anchor="w") self.pro = Label(sframe, text="Server>>") self.sendtext = Entry(sframe, width=80) self.sendtext.focus_set() self.sendtext.bind(sequence="<Return>", func=self.Send) self.pro.pack(side=LEFT) self.sendtext.pack(side=LEFT) self.gettext.insert(END, "Welcome to Chat\n") self.gettext.configure(state=DISABLED) def Send(self, args): self.gettext.configure(state=NORMAL) text = self.sendtext.get() if text == "": text = " " self.gettext.insert(END, "Me >> %s \n" % text) self.sendtext.delete(0, END) self.client.send(text) self.sendtext.focus_set() self.gettext.configure(state=DISABLED) self.gettext.see(END) def sendFile(self, sock, file): sock.send(filFlag) user = os.environ["USER"] command = filFlag size = os.stat(file)[6] try: f = open(file, "r") except: ret = 0 else: pos = 0 while 1: if pos == 0: buffer = f.read(5000000 - 282) if not buffer: break count = sock.send( command + ":" + string.rjust(os.path.basename(file), 214) + ":" + string.rjust(str(size).strip(), 30) + ":" + string.rjust(str(user).strip(), 30) + buffer ) pos = 1 else: buffer = f.read(5000000) if not buffer: break count = sock.send(buffer) ret = 1 return ret def recvFile(self, sock): pjg = 0 msg1 = sock.recv(283).split(":") flag = msg1[0].strip() namafile = msg1[1].strip() total = msg1[2].strip() user = msg1[3].strip() file = namafile if flag == filFlag: try: f = open(file, "w") except: ret = 0 else: try: while 1: leftToRead = int(total) - pjg if not leftToRead: break msg = sock.recv(5000000) pjg = pjg + len(msg) f.write(msg) f.close() except: os.remove(file) ret = 0 else: ret = 1 ret = 1 return ret def run(self): Receive(self.client, self.gettext, self.client) # buat class menerima data
class App(Thread): client = socket() print ("CLIENT") client.connect((input("IP Server: "), input("Port: "))) def __init__(self, master): Thread.__init__(self) frame = Frame(master) frame.pack() self.gettext = ScrolledText(frame, height=10,width=100) self.gettext.pack() self.gettext.insert(END,'Welcome to Chat\n') self.gettext.configure(state=DISABLED) sframe = Frame(frame) sframe.pack(anchor='w') self.pro = Label(sframe, text="Client>>"); self.sendtext = Entry(sframe,width=80) self.sendtext.focus_set() self.sendtext.bind(sequence="<Return>", func=self.Send) self.pro.pack(side=LEFT) self.sendtext.pack(side=LEFT) def Send(self, args): self.gettext.configure(state=NORMAL) text = self.sendtext.get() if text=="": text=" " self.gettext.insert(END,'Me >> %s\n'%text) self.sendtext.delete(0,END) self.client.send(text) self.sendtext.focus_set() self.gettext.configure(state=DISABLED) self.gettext.see(END) def sendFile(self,sock,file): sock.send(filFlag) user = os.environ['USER'] command = filFlag size = os.stat(file)[6] f = open(file,'r') pos = 0 while 1: if pos == 0: buffer = f.read(5000000-282) if not buffer: break count = sock.send(command + ':' + \ string.rjust(os.path.basename(file),214) + ':' + \ string.rjust(str(size).strip(),30) + ':' + \ string.rjust(str(user).strip(),30) + \ buffer) pos = 1 else: buffer = f.read(5000000) if not buffer: break count = sock.send(buffer) def recvFile(self,sock): pjg = 0 msg1 = sock.recv(283).split(':') flag = msg1[0].strip() namafile = msg1[1].strip() total = msg1[2].strip() user = msg1[3].strip() file = namafile if flag == filFlag: try: f = open(file,'w') except: ret = 0 print 'Tidak dapat menyimpan file' sys.exit() else: try: while 1: leftToRead = int(total) - pjg if not leftToRead: break msg = sock.recv(5000000) pjg = pjg + len(msg) f.write(msg) os.system('echo -n !') f.close() except: os.remove(file) ret = 0 else: ret = 1 def run(self): Receive(self.client, self.gettext)
class Jimapn(Frame): # Max zoom level MAX_ZOOM_LEVEL = 18 # Min zoom level MIN_ZOOM_LEVEL = 5 # Tile size TILE_HEIGHT = 256 TILE_WIDTH = 256 # Canvas size CANVAS_HEIGHT = 768 CANVAS_WIDTH = 768 # Display canvas size DISPLAY_CANVAS_HEIGHT = 480 DISPLAY_CANVAS_WIDTH = 500 # Canvas TILE CANVAS_X = 5 CANVAS_Y = 5 CANVAS_XY = CANVAS_X * CANVAS_Y def __init__(self, master=None): Frame.__init__(self, master) # self.master.title("[JIMAP]") self.master.minsize(300, 300) self.master.maxsize(2000, 2000) self.master.geometry("1000x600") # window size self.mode = "{0}".format("Select") self.zoom_level = Jimapn.MIN_ZOOM_LEVEL self.latitude = 35.43134 self.longitude = 139.26086 self.aaom_x = 0 self.aaom_y = 0 self.map_area = [['' for i in xrange(Jimapn.CANVAS_X)] for j in xrange(Jimapn.CANVAS_Y)] # self.print_map = [[ '' for i in xrange(Jimapn.CANVAS_X)] for j in xrange(Jimapn.CANVAS_Y)] self.cid = [['' for i in xrange(Jimapn.CANVAS_X)] for j in xrange(Jimapn.CANVAS_Y)] for i in xrange(Jimapn.CANVAS_X): for j in xrange(Jimapn.CANVAS_Y): self.map_area[i][j] = { "img_file_path": "", "img_file": "", } # ## Layout # Menu menubar = Menu(self) files = Menu(menubar, tearoff=False) menubar.add_cascade(label="Files", underline=0, menu=files) exit = Menu(menubar, tearoff=False) menubar.add_cascade(label="Exit", underline=0, menu=exit) exit.add_command(label="Exit", underline=0, command=sys.exit) self.master.configure(menu=menubar) # # Left side left_side_frame = LabelFrame(self) left_side_frame.configure(labelanchor="nw", text="layer", relief="groove") left_side_frame.grid(row=0, column=0, padx=1, pady=1, sticky="W") # display my place point myplace_display = ScrolledText(left_side_frame) myplace_display.configure( height=4, width=20, ) myplace_display.grid(row=0, column=0, padx=1, pady=5) # # Center center_frame = Frame(self) center_frame.configure(relief="raised") center_frame.grid(row=0, column=1, sticky="W" + "E" + "N" + "S") # Top # # search place input self.search_place_text = StringVar() self.search_place = Entry(center_frame) self.bind_search_place() self.search_place.configure(width=50, relief="sunken", textvariable=self.search_place_text) self.search_place.grid(row=0, column=0, padx=5, pady=5) # search button self.search_button = Button(center_frame) self.search_button.configure( foreground="#3f3f3f", background="#cfcfcf", text="Search", cursor="arrow", command=self.search_place_start, ) self.search_button.grid(row=0, column=1, padx=5, pady=5) # Draw maps self.print_map = Canvas(center_frame) self.bind_canvas() self.print_map.configure(height=Jimapn.DISPLAY_CANVAS_HEIGHT, width=Jimapn.DISPLAY_CANVAS_WIDTH, scrollregion=("0", "0", Jimapn.CANVAS_WIDTH, Jimapn.CANVAS_HEIGHT)) self.print_map.grid(row=1, column=0, sticky="W" + "E" + "N" + "S") self.xscroll = Scrollbar(center_frame) self.xscroll.configure( orient="horizontal", background="#0f0f0f", activebackground="#0f0f0f", highlightbackground="#0f0f0f", troughcolor="#2f8fff", relief="groove", activerelief="flat", width=10, command=self.print_map.xview, ) self.xscroll.grid(row=2, column=0, sticky="E" + "W") self.yscroll = Scrollbar(center_frame) self.yscroll.configure( orient="vertical", command=self.print_map.yview, ) self.yscroll.grid(row=1, column=1, sticky='N' + 'S') self.print_map.config(xscrollcommand=self.xscroll.set, yscrollcommand=self.yscroll.set) center_frame.grid_rowconfigure(0, weight=1, minsize=0) center_frame.grid_columnconfigure(0, weight=1, minsize=0) # # Right side right_side_frame = LabelFrame(self) right_side_frame.configure(labelanchor="nw", text="tools", relief="groove") right_side_frame.grid(row=0, column=2) # select button select_button = Button(right_side_frame) select_button.configure(foreground="#3f3f3f", background="#cfcfcf", text="➩", cursor="man") select_button.grid(row=0, column=0, padx=5, pady=5) # draw button draw_button = Button(right_side_frame) draw_button.configure(foreground="#3f3f3f", background="#cfcfcf", text="✎", cursor="pencil") draw_button.grid(row=0, column=1, padx=5, pady=5) # Map zoom zoom_in_button = Button(right_side_frame) zoom_in_button.configure(foreground="#5f5f5f", background="#ffffff", text="+", relief="groove", command=lambda: self.scale_change(1)) zoom_in_button.grid(row=10, column=0, padx=5, pady=5) print_zoom_level = Label(right_side_frame) self.zoom_level_label = StringVar() self.zoom_level_label.set(self.zoom_level) print_zoom_level.configure(width=2, textvariable=self.zoom_level_label, foreground="#cfcfcf", background="#0f0f0f", relief="groove") print_zoom_level.grid(row=11, column=0, padx=5, pady=5) zoom_out_button = Button(right_side_frame) zoom_out_button.configure(foreground="#5f5f5f", background="#ffffff", text="-", relief="groove", command=lambda: self.scale_change(-1)) zoom_out_button.grid(row=12, column=0, padx=5, pady=5) # # Bottom bottom_frame = LabelFrame(self) bottom_frame.configure(bg="#efefef", labelanchor="nw", text="debug space", relief="ridge") bottom_frame.grid(row=1, column=1, padx=10, pady=10) # print mode self.mode_print = Label(bottom_frame) self.mode_print.configure(foreground="#5f5f5f", background="#dfdfdf", height=1, width=10, relief="groove", text="{0}".format(self.mode)) self.mode_print.grid(row=1, column=0, padx=5, pady=5) # print mouse cursor postion self.print_xy = Label(bottom_frame) self.print_xy.configure(foreground="#5f5f5f", background="#dfdfdf", height=1, width=25, relief="groove") self.print_xy.grid(row=1, column=1, padx=5, pady=5) # print log # # log print space font = tkFont.Font(family="Consolas", size=10) self.log_place = ScrolledText(bottom_frame) self.log_place.configure( foreground="#5f5f5f", background="#dfdfdf", selectforeground="#cfcfcf", selectbackground="#2f2f8f", height=5, width=50, relief="sunken", font=font, ) self.log_place.grid(row=0, column=1, padx=5, pady=5) self.log_place.insert("end", "zoom_level : {0}\n".format(self.zoom_level)) self.log_place.see("end") self.map_draw(latitude=self.latitude, longitude=self.longitude) self.show_place() # right click menu self.right_click_menu = Menu(self.print_map, tearoff=False) place_recode = Menu(self.right_click_menu) self.right_click_menu.add_cascade(label=u"場所", menu=place_recode, under=2) place_recode.add_command(label=u"この場所を登録", underline=1, command=self.recode_place) exit_menu = Menu(self.right_click_menu) self.right_click_menu.add_cascade(label=u"終了", underline=0, menu=exit_menu) exit_menu.add_command(label=u"終了", underline=1, command=sys.exit) # place_recode.add_cascade(label = "Recode place", underline = 0, menu = place_recode) def map_draw(self, **args): if "latitude" in args or "longitude" in args: x, y = convert_longlati_topixcel(args["latitude"], args["longitude"], self.zoom_level) self.offset_x = int(math.floor(x)) self.offset_y = int(math.floor(y)) else: self.offset_x = args["offset_x"] self.offset_y = args["offset_y"] tile_x, position_in_tile_x = divmod(self.offset_x, Jimapn.TILE_WIDTH) tile_y, position_in_tile_y = divmod(self.offset_y, Jimapn.TILE_WIDTH) # 必要なタイル数 rows = Jimapn.CANVAS_HEIGHT / Jimapn.TILE_HEIGHT columns = Jimapn.CANVAS_WIDTH / Jimapn.TILE_WIDTH if position_in_tile_x != 0: columns += 1 if position_in_tile_y != 0: rows += 1 for i in xrange(rows): for j in xrange(columns): self.log_place.insert("end", "i : {0} / j : {1}\n".format(i, j)) self.log_place.see("end") self.map_area[i][j]["img_path"] = self.set_img_path( tile_x + j, tile_y + i) # print "img_path : {0}".format(img_path) if self.map_area[i][j]["img_path"]: image = Image.open(self.map_area[i][j]["img_path"]) self.map_area[i][j]["img_file"] = ImageTk.PhotoImage(image) padding_x = j * Jimapn.TILE_WIDTH + ( Jimapn.TILE_WIDTH / 2) - position_in_tile_x padding_y = i * Jimapn.TILE_HEIGHT + ( Jimapn.TILE_HEIGHT / 2) - position_in_tile_y # padding_x = (j-1) * Jimapn.TILE_WIDTH + (Jimapn.TILE_WIDTH / 2) # padding_y = (i-1) * Jimapn.TILE_HEIGHT + (Jimapn.TILE_HEIGHT / 2) # self.cid[i][j] = self.print_map.create_image(padding_x, padding_y, image = # self.map_area[i][j]["img_file"]) self.cid[i][j] = self.print_map.create_image( padding_x, padding_y, image=self.map_area[i][j]["img_file"], tags="map_tile") # map_tile(padding_x, padding_y, self.map_area[i][j]["img_file"]) self.log_place.insert( "end", "Canvas id : {0} \n".format(self.cid[i][j])) self.log_place.insert("end", "Canvas_row : {0:d} \n".format(rows)) self.log_place.insert( "end", "canvas_column : {0:d}\n".format(columns)) self.log_place.insert( "end", "map_tile-{0}-{1} : {2}\n".format( i, j, self.map_area[i][j]["img_file"])) self.log_place.see("end") # draw line that tile size # for i in xrange(3): # line_padding_x = (i + 1) * Jimapn.TILE_WIDTH # line_padding_y = (i + 1) * Jimapn.TILE_HEIGHT # self.log_place.insert("end", "line_padding_x : {0:d}\n".format(line_padding_x)) # self.log_place.insert("end", "line_padding_y : {0:d}\n".format(line_padding_y)) # self.log_place.see("end") # self.print_map.create_line(line_padding_x, 0, line_padding_x, Jimapn.CANVAS_HEIGHT) # self.print_map.create_line(0, line_padding_y, Jimapn.CANVAS_WIDTH, line_padding_y) # draw center mark self.print_map.create_rectangle(Jimapn.CANVAS_HEIGHT / 2 - 8, Jimapn.CANVAS_WIDTH / 2 - 8, Jimapn.CANVAS_HEIGHT / 2 + 8, Jimapn.CANVAS_WIDTH / 2 + 8, fill="#0f0f3f") # draw copyright copyright = u"©地理図院地図" ctx = Jimapn.DISPLAY_CANVAS_HEIGHT - 50 cty = Jimapn.DISPLAY_CANVAS_WIDTH - 50 self.print_map.create_text(ctx, cty, text=copyright) def loop_range(self): """ get loop range """ start_x = 1 start_y = 1 if self.aaom_x % Jimapn.TILE_WIDTH == 0 or self.aaom_x == 0: start_x = 1 elif self.aaom_x > 0: start_x = 0 elif self.aaom_x < 0: start_x = 2 if self.aaom_y % Jimapn.TILE_WIDTH == 0 or self.aaom_y == 0: start_y = 1 elif self.aaom_y > 0: start_y = 0 elif self.aaom_y < 0: start_y = 2 end_x = start_x + 3 end_y = start_y + 3 return start_x, start_y, end_x, end_y def set_img_path(self, lat, lon): """ return maptile file path """ x = lat y = lon data_id = "std" ext = "png" map_tile_file = "{0}/map_tile/{1}/{2}-{3}.{4}".format( DATA_DIR, self.zoom_level, x, y, ext) if not (os.path.exists(map_tile_file)): # map tile file download try: request_url = "http://cyberjapandata.gsi.go.jp/xyz/" + \ "{0}/{1}/{2}/{3}.{4}".format( data_id, self.zoom_level, x, y, ext) request = urllib2.urlopen(request_url) with open(map_tile_file, "wb") as picf: picf.write(request.read()) except urllib2.URLError: # Request file not exists ... map_tile_file = DATA_DIR + "/No_Image/No_Image.png" return map_tile_file def scale_change(self, n): old_level = self.zoom_level self.zoom_level += n if self.zoom_level < Jimapn.MIN_ZOOM_LEVEL: self.zoom_level = Jimapn.MIN_ZOOM_LEVEL return self.zoom_level elif self.zoom_level > Jimapn.MAX_ZOOM_LEVEL: self.zoom_level = Jimapn.MAX_ZOOM_LEVEL return self.zoom_level self.zoom_level_label.set(self.zoom_level) self.log_place.insert( "end", "*** zoom change : {0}->{1} <{2}> ***\n".format( old_level, self.zoom_level, n)) self.log_place.see("end") self.offset_x = int(self.offset_x * math.pow(2, n)) self.offset_y = int(self.offset_y * math.pow(2, n)) if n > 0: ajust_x = Jimapn.TILE_WIDTH ajust_y = Jimapn.TILE_HEIGHT else: ajust_x = -Jimapn.TILE_WIDTH ajust_y = -Jimapn.TILE_HEIGHT self.map_draw(offset_x=self.offset_x + ajust_x, offset_y=self.offset_y + ajust_y) def recode_place_draw(self): pass # Canvas event def bind_canvas(self): self.print_map.bind("<Motion>", self.get_canvas_postion) self.print_map.bind("<Button-1>", self.drag_start) self.print_map.bind("<ButtonRelease-1>", self.move_map) self.print_map.bind("<Button-3>", self.show_right_menu) # Search event def bind_search_place(self): self.search_place.bind("<Return>", self.call_search_place_start) # display candidate list event def bind_display_candidate(self): self.candidate_box.bind("<Button-1>", self.select_position) def select_position(self, event): selection = self.candidate_box.selection() if selection: item = self.candidate_box.item(selection) latitude = item["values"][1] longitude = item["values"][2] print "latitude : {0}".format(latitude) print "longitude : {0}".format(longitude) self.map_draw(latitude=float(latitude), longitude=float(longitude)) # print select def call_search_place_start(self, event): self.search_place_start() def search_place_start(self): print " start search place" search_place_string = self.search_place_text.get() if search_place_string == "": print "None input" return False self.log_place.insert( "end", "search : {0}\n".format(search_place_string.encode('utf-8'))) # latitude, longitude match = re.match(r"(\d+\.*\d*[,\s]+\d+\.*\d*)", search_place_string) # Zenkaku match2 = re.match(r"([^\x01-\x7E])", search_place_string) if match: print "search case latitude, longitude" position = re.split(r"([,\s])+", search_place_string) # self.log_place.insert("end", "search : {0}\n".format(match)) latitude = position[0] longitude = position[2] self.log_place.see("end") self.map_draw(latitude=float(latitude), longitude=float(longitude)) return True elif match2: print "search case place name" candidate = get_place_candidate(search_place_string) if candidate: candi_win = Toplevel(self) candi_win.title("Candidate List") candi_win.configure( background="#0f0f0f", highlightcolor="#2faf2f", highlightbackground="#0f0faf", relief="groove", ) cwf = Frame(candi_win) cwf.pack(fill="both", expand=1) style = ttk.Style() style.configure('Treeview', width=50, height=30, foreground="#5f5f5f", background="#ffefef", highlightcolor="#2faf2f", highlightbackground="#0f0faf", scrollregion=("0", "0", 200, 200)) self.candidate_box = ttk.Treeview(cwf) self.candidate_box.configure(columns=('place_name', 'latitude', 'longitude'), ) self.cbxscroll = Scrollbar(cwf, orient="horizontal", command=self.candidate_box.xview) self.cbyscroll = Scrollbar(cwf, orient="vertical", command=self.candidate_box.yview) self.candidate_box.configure( selectmode="browse", xscroll=self.cbxscroll.set, yscroll=self.cbyscroll.set, ) # self.candidate_box.pack() # self.cbyscroll.pack() self.candidate_box.grid(row=0, column=0, sticky='W' + 'E' + 'N' + 'S') self.cbxscroll.grid(row=1, column=0, sticky='W' + 'E') self.cbyscroll.grid(row=0, column=1, sticky='N' + 'S') self.candidate_box.column("#0", width=0) self.candidate_box.heading("place_name", text=u"地名") self.candidate_box.heading("latitude", text=u"緯度") self.candidate_box.heading("longitude", text=u"経度") for i in xrange(len(candidate)): # print "place_name : {0}".format(candidate[i]["place_name"]) # print "latitude : {0}".format(candidate[i]["latitude"]) # print "longitude : {0}".format(candidate[i]["longitude"]) self.candidate_box.insert( "", "end", values=(candidate[i]["place_name"].decode('shift-jis'), candidate[i]["latitude"], candidate[i]["longitude"])) # candidate_box.insert("end", "{0} | {1} | {2}".format( \ # candidate[i]["place_name"].decode('shift-jis'),\ # candidate[i]["latitude"], \ # candidate[i]["longitude"], # )) pass self.bind_display_candidate() # print candidate else: print "Not found ..." else: print "Sorry Not found ..." pass def get_canvas_postion(self, event): pos_x = event.x pos_y = event.y # self.master.title("[JIMAP] x:{0} / y:{1}".format(str(pos_x),str(pos_y))) latitude, longitude = self.oncursor_position(pos_x, pos_y) # print "x : {0} / y : {1}".format(pos_x, pos_y) self.print_xy.configure( text="x : {0:4d} / y : {1:4d}".format(pos_x, pos_y)) def oncursor_position(self, x, y): scroll_x1, _ = self.xscroll.get() scroll_y1, _ = self.yscroll.get() pad_x = scroll_x1 * Jimapn.CANVAS_WIDTH pad_y = scroll_y1 * Jimapn.CANVAS_HEIGHT # print "xscroll : {0}".format(pad_x) # print "yscroll : {0}".format(pad_y) # cursor_tile_x = x / Jimapn.TILE_WIDTH # cursor_tile_y = y / Jimapn.TILE_HEIGHT cursor_position_x = (self.offset_x + x + pad_x) cursor_position_y = (self.offset_y + y + pad_y) self.log_place.insert( "end", "cursor tile x : {0}\n".format(cursor_position_x)) self.log_place.insert( "end", "cursor tile y : {0}\n".format(cursor_position_y)) self.latitude, self.longitude = convert_pixcel_tolonglati( cursor_position_x, cursor_position_y, self.zoom_level) self.log_place.insert("end", "zoom level : {0}\n".format(self.zoom_level)) self.log_place.insert("end", "latitude : {0}\n".format(self.latitude)) self.log_place.insert("end", "longitude : {0}\n".format(self.longitude)) # self.log_place.see("end") self.master.title("[JIMAP] x:{0} / y:{1}".format( str(self.latitude), str(self.longitude))) return self.latitude, self.longitude def drag_start(self, event): self.drag_start_x = event.x self.drag_start_y = event.y self.print_map.configure(cursor="hand2") self.log_place.insert( "end", "x : {0} / y : {1}\n".format(self.drag_start_x, self.drag_start_y)) def move_map(self, event): x = event.x y = event.y aom_x = x - self.drag_start_x aom_y = y - self.drag_start_y self.offset_x -= aom_x self.offset_y -= aom_y # self.print_map.move("map_tile", aom_x, aom_y) self.map_draw(offset_x=self.offset_x, offset_y=self.offset_y) def show_right_menu(self, event): self.right_click_menu.post(event.x_root, event.y_root) def recode_place(self): win = edit_window(self, self.latitude, self.longitude) win.setter() def show_place(self): # recode place exists? place = {} recode_dir = DATA_DIR + "/" + "place_data" # layer directory for layer in glob.glob(recode_dir + "/*"): if os.path.isdir(layer): # kind directory for kind in glob.glob(layer + "/*"): if os.path.isdir(kind): # recode file for place_file in glob.glob(kind + "/*"): if os.path.isdir(place_file): print "Not found ..." pass else: print "Found : {0}".format(place_file) with open(place_file, "rb") as pf: reader = csv.reader(pf) for row in reader: place = { layer: { kind: { "place_name": row[0].decode('utf-8'), "place_name_kana": row[1].decode('utf-8'), "layer": row[2], "kind": row[3], "latitude": row[4], "longitude": row[5], "memo": row[6].decode('utf-8'), } } } else: pass else: pass print place