Skip to content

Instantly share code, notes, and snippets.

@gatlin
Created December 18, 2014 20:36
Show Gist options
  • Save gatlin/d102220591b6077fdb83 to your computer and use it in GitHub Desktop.
Save gatlin/d102220591b6077fdb83 to your computer and use it in GitHub Desktop.
I made a command line thing to let me quickly generate and display QR codes
#!/usr/bin/env perl
use v5.20;
use Gtk3 -init;
use Image::PNG::QRCode qw(qrpng);
use File::Temp qw(tempfile);
my $sample_data = $ARGV[0] // "gatlin is so handsome";
my $scale = 9;
# Must be declared before `mkqrcode`
my $label = Gtk3::Label->new;
$label->set_selectable(1);
# Actions
sub mkqrcode {
my ($in) = @_;
my ($fh, $filename) = tempfile;
qrpng(text => $in, out => $filename, scale => $scale);
$label->set_text($filename);
return $filename;
}
my $window = Gtk3::Window->new('toplevel');
$window->set_title("QR Code");
my $image = Gtk3::Image->new_from_file(mkqrcode $sample_data);
my $textIn = Gtk3::Entry->new;
$textIn->set_text($sample_data);
# Layout
my $layout = Gtk3::Box->new('GTK_ORIENTATION_VERTICAL', 1);
$layout->add($textIn);
$layout->add($image);
$layout->add($label);
$window->add($layout);
# Signals
$textIn->signal_connect (activate => sub {
my ($entry) = @_;
$image->set_from_file(mkqrcode $entry->get_text);
});
$textIn->signal_connect (changed => sub {
my ($entry) = @_;
$image->set_from_file(mkqrcode $entry->get_text);
});
$window->signal_connect (destroy => sub { Gtk3::main_quit });
# gogogo
$window->show_all;
Gtk3::main;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment