Cosi' come per PyGtk anche le librerie WxPython non sono aggiornate a Python 3.x per cui si deve usare la versione 2.x
Nella versione per Windows richiedono i privilegi di amministrazione
----------------------------------------------------------
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition,(300,150))
panel = wx.Panel(self, -1)
self.sld = wx.Slider(self, -1, 0, 0, 100,(10,10),(270,50),wx.SL_AUTOTICKS | wx.SL_HORIZONTAL | wx.SL_LABELS)
self.label = wx.StaticText(self,wx.ID_ANY,"0 ",pos=(140,60),size=(100,20))
self.progressbar = wx.Gauge(self,-1,100,pos=(10,90),size=(270,20))
self.Bind(wx.EVT_SLIDER, self.sliderUpdate)
wx.EVT_BUTTON(self, 9, self.OnClose)
def OnClose(self, event):
self.Close()
def sliderUpdate(self,event):
self.label.SetLabel(str(self.sld.GetValue()))
self.progressbar.SetValue(self.sld.GetValue())
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, 'Progress Bar')
frame.Show(True)
frame.Centre()
return True
app = MyApp(0)
----------------------------------------------------------
mercoledì 22 agosto 2012
Esempio GUI con Java
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());
}
});
}
}
------------------------------------------------------------------------
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());
}
});
}
}
------------------------------------------------------------------------
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
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
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...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
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...