per scrivere questo esempio e' stato impiegato Eclipse nella versione per sviluppatori Java che include al suo interno il plugin di Google denominato WindowBuilder Pro per la gestione dell'interfaccia grafica di Java
Per creare un progetto Java/WindowBuilder, dopo aver installato Eclipse, si clicca File/New/Other/WindowBuilder/SwingDesigner/Application
per spostarsi tra l'editor visuale e la parte di codice si clicca nei tab in basso. Per il resto la programmazione e' molto simile agli altri ambienti di sviluppo visuale
------------------------------------------------------------------------
package com.test.swing2;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.SwingConstants;
public class Swing2 {
private JFrame frmProgressBar;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Swing2 window = new Swing2();
window.frmProgressBar.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Swing2() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmProgressBar = new JFrame();
frmProgressBar.setTitle("Progress Bar");
frmProgressBar.setBounds(100, 100, 279, 94);
frmProgressBar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JProgressBar progressBar_1 = new JProgressBar();
frmProgressBar.getContentPane().add(progressBar_1, BorderLayout.SOUTH);
final JSlider slider = new JSlider();
frmProgressBar.getContentPane().add(slider, BorderLayout.NORTH);
final JLabel lblNewLabel = new JLabel("50");
lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
frmProgressBar.getContentPane().add(lblNewLabel, BorderLayout.CENTER);
slider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent arg0) {
lblNewLabel.setText(Integer.toString(slider.getValue()));
progressBar_1.setValue(slider.getValue());
}
});
}
}
------------------------------------------------------------------------
mercoledì 22 agosto 2012
Esempio GUI con PYGtk
Al contrario degli esempio precedenti PyGtk non funziona con la versione 3.x di Python per cui e' necessario usare un compilatore della serie 2.x
----------------------------------------------
import pygtk
pygtk.require('2.0')
import gtk
class SecondWin:
def __init__(self):
self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.win.connect("delete_event", self.delete_event)
self.win.connect("destroy", self.destroy)
#self.win.set_resizable(gtk.FALSE)
self.win.set_title('Progress Bar')
self.win.set_border_width(5)
self.win.resize(200,100)
self.vbox = gtk.VBox()
self.win.add(self.vbox)
adjustment = gtk.Adjustment(0, 0, 100, 5, 10, 0)
self.hscale = gtk.HScale(adjustment)
self.vbox.pack_start(self.hscale)
self.hscale.set_digits(0)
self.hscale.connect("value-changed", self.scale_moved)
self.label = gtk.Label(str=" ")
self.vbox.pack_start(self.label)
self.progressbar = gtk.ProgressBar()
self.vbox.pack_start(self.progressbar)
self.win.show_all()
def scale_moved(self, event):
self.label.set_text(str(self.hscale.get_value()))
self.progressbar.set_fraction(self.hscale.get_value()/100)
def delete_event(self, widget, event, data=None):
return gtk.FALSE
def destroy(self, widget, data=None):
return gtk.main_quit()
def main(self):
gtk.main()
if __name__ == "__main__":
second = SecondWin()
second.main()
----------------------------------------------
----------------------------------------------
import pygtk
pygtk.require('2.0')
import gtk
class SecondWin:
def __init__(self):
self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.win.connect("delete_event", self.delete_event)
self.win.connect("destroy", self.destroy)
#self.win.set_resizable(gtk.FALSE)
self.win.set_title('Progress Bar')
self.win.set_border_width(5)
self.win.resize(200,100)
self.vbox = gtk.VBox()
self.win.add(self.vbox)
adjustment = gtk.Adjustment(0, 0, 100, 5, 10, 0)
self.hscale = gtk.HScale(adjustment)
self.vbox.pack_start(self.hscale)
self.hscale.set_digits(0)
self.hscale.connect("value-changed", self.scale_moved)
self.label = gtk.Label(str=" ")
self.vbox.pack_start(self.label)
self.progressbar = gtk.ProgressBar()
self.vbox.pack_start(self.progressbar)
self.win.show_all()
def scale_moved(self, event):
self.label.set_text(str(self.hscale.get_value()))
self.progressbar.set_fraction(self.hscale.get_value()/100)
def delete_event(self, widget, event, data=None):
return gtk.FALSE
def destroy(self, widget, data=None):
return gtk.main_quit()
def main(self):
gtk.main()
if __name__ == "__main__":
second = SecondWin()
second.main()
----------------------------------------------
Cattura video su Raspberry
Primo tentativo di cattura video su Raspberry. E' stata utilizzata una Logitech QuickCam 2500 con l'installazione di default di ffmpeg di Rapbian (che e' conosciuta per essere buggata)
La stringa di configurazione di ffmpeg e' la seguente
ffmpeg -f video4linux2 -s 640x472 -r 5 -sameq -i /dev/video0 -f m4v /home/pi/5.m4v
La stringa di configurazione di ffmpeg e' la seguente
ffmpeg -f video4linux2 -s 640x472 -r 5 -sameq -i /dev/video0 -f m4v /home/pi/5.m4v
320x240
640x472
Esempio di GUI con Gambas
Tempo di sviluppo : 3 minuti (e non avevo mai usato prima Gambas)
-----------------------------------------------------------------
PUBLIC SUB Form_Open()
Label1.Alignment = 3
END
PUBLIC SUB Slider1_Change()
Label1.Text = Slider1.Value
ProgressBar1.Value = Slider1.Value / 100
END
-----------------------------------------------------------------
-----------------------------------------------------------------
PUBLIC SUB Form_Open()
Label1.Alignment = 3
END
PUBLIC SUB Slider1_Change()
Label1.Text = Slider1.Value
ProgressBar1.Value = Slider1.Value / 100
END
-----------------------------------------------------------------
martedì 21 agosto 2012
Configurazione DHCP Server su Debian
Per usare Raspberry senza impazzire continuamente con le configurazioni di rete puo' essere comodo montare sulla macchina di sviluppo un server dhcp
su Debian si procedere installando
apt-get install isc-dhcp-server
dopo di cio' si puo' editare il file /etc/dhcp.conf modificando brevemente le righe
subnet 192.168.0.1 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.20;
}
impostando la macchina di sviluppo per esempio su 192.168.1.1 ed avviando il server con
/etc/init.d/isc-dhcp-server start
e collegando la Raspberry con il cavo cross questa assumera' il primo indirizzo disponibile ovvero 192.168.1.10
su Debian si procedere installando
apt-get install isc-dhcp-server
dopo di cio' si puo' editare il file /etc/dhcp.conf modificando brevemente le righe
subnet 192.168.0.1 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.20;
}
impostando la macchina di sviluppo per esempio su 192.168.1.1 ed avviando il server con
/etc/init.d/isc-dhcp-server start
e collegando la Raspberry con il cavo cross questa assumera' il primo indirizzo disponibile ovvero 192.168.1.10
USB Serial Converter PL2303
Ho ritirato fuori da un cassetto un convertitore seriale-USB che usavo per scaricare i dati da un GPS sotto Windows. Mi e' venuta voglia di vedere come funziona sotto Linux attacandolo ad un modem seriale US Robotics FaxModem 56 Kb. Peraltro il convertitore mi e' stato venduto praticamente senza nessuna indicazione del chip interno ed io ovviamente non ho piu' il miniCD di installazione
Una volta inserito il convertitore in /var/log/messages compaiono le seguenti righe
Aug 21 16:21:06 kranz kernel: [ 107.649459] pl2303 2-1:1.0: pl2303 converter detected
Aug 21 16:21:06 kranz kernel: [ 107.661505] usb 2-1: pl2303 converter now attached to ttyUSB0
Aug 21 16:21:06 kranz kernel: [ 107.661557] usbcore: registered new interface driver pl2303
Aug 21 16:21:06 kranz kernel: [ 107.661565] pl2303: Prolific PL2303 USB to serial adaptor driver
Aug 21 16:23:24 kranz kernel: [ 245.756599] Marking TSC unstable due to TSC halts in idle
come si puo' vedere in Debian il convertitore e' riconosciuto come un pl2303 e si collega in automatico come porta virtuale alla /dev/ttyUSB0
per la cronaca non ho mai avuto l'alimentatore del modem (perche' mi e' stato regalato) e tirando a caso ho visto che servono 12 V con la seguente pedinatura
Una volta inserito il convertitore in /var/log/messages compaiono le seguenti righe
Aug 21 16:21:06 kranz kernel: [ 107.649459] pl2303 2-1:1.0: pl2303 converter detected
Aug 21 16:21:06 kranz kernel: [ 107.661505] usb 2-1: pl2303 converter now attached to ttyUSB0
Aug 21 16:21:06 kranz kernel: [ 107.661557] usbcore: registered new interface driver pl2303
Aug 21 16:21:06 kranz kernel: [ 107.661565] pl2303: Prolific PL2303 USB to serial adaptor driver
Aug 21 16:23:24 kranz kernel: [ 245.756599] Marking TSC unstable due to TSC halts in idle
come si puo' vedere in Debian il convertitore e' riconosciuto come un pl2303 e si collega in automatico come porta virtuale alla /dev/ttyUSB0
per la cronaca non ho mai avuto l'alimentatore del modem (perche' mi e' stato regalato) e tirando a caso ho visto che servono 12 V con la seguente pedinatura
Esempio GUI con TKinter
Un esempio di uso della GUI Tkinter su Python 3.2 (da confrontare con questo post)
------------------------------------------
import tkinter as tk
from tkinter import ttk
class App:
def __init__(self):
self.root = tk.Tk()
self._job = None
self.root.title("Progress Bar")
self.frame = tk.Frame(self.root, width=200, height=10)
self.frame.pack()
self.slider = tk.Scale(self.root, from_=0, to=100,
orient="horizontal",
command=self.updateValue, length=200)
self.slider.pack()
self.lab = tk.Label(self.root, text=" ")
self.lab.pack()
self.pbar = ttk.Progressbar(self.root, length=200,mode="determinate", maximum=100)
self.pbar.pack(padx=5, pady=5)
self.pbar.start
self.root.mainloop()
def updateValue(self, event):
if self._job:
self.root.after_cancel(self._job)
self.pbar["value"] = int(self.slider.get())
self.lab.config(text=str(self.slider.get()))
app=App()
------------------------------------------
------------------------------------------
import tkinter as tk
from tkinter import ttk
class App:
def __init__(self):
self.root = tk.Tk()
self._job = None
self.root.title("Progress Bar")
self.frame = tk.Frame(self.root, width=200, height=10)
self.frame.pack()
self.slider = tk.Scale(self.root, from_=0, to=100,
orient="horizontal",
command=self.updateValue, length=200)
self.slider.pack()
self.lab = tk.Label(self.root, text=" ")
self.lab.pack()
self.pbar = ttk.Progressbar(self.root, length=200,mode="determinate", maximum=100)
self.pbar.pack(padx=5, pady=5)
self.pbar.start
self.root.mainloop()
def updateValue(self, event):
if self._job:
self.root.after_cancel(self._job)
self.pbar["value"] = int(self.slider.get())
self.lab.config(text=str(self.slider.get()))
app=App()
------------------------------------------
Iscriviti a:
Post (Atom)
Change Detection with structural similarity
L'idea di base e' quella di cercare le differenze tra le due immagini sottostanti Non e' immediatamente visibile ma ci sono dei ...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...