Linux Prorgramm starten

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Hannes_1

Hallo,

als "blutiger" Anfänger mit Python habe ich gleich eine Frage.

Ich habe mir ein Fenster mit versch. Buttons angelegt.

Code: Alles auswählen

# Vertikale Box
        vbox = gtk.VBox(True, 1)
        button = gtk.Button("Kate")
        button.show()
Welchen Code muss ich einsetzen, damit beim Drücken des Buttons ( Kate ) der Editor "Kate" gestartet wird?


Mit freundlichen Grüßen
Hannes
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Du musst einen neuen Prozess starten:

Code: Alles auswählen

import subprocess
subprocess.Popen('kate')
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Hannes_1

Hallo,

vielen Dank für den Tipp.
Da ich vollkommener Neuling bin,

Code: Alles auswählen

import subprocess


# Vertikale Box
        vbox = gtk.VBox(True, 1)
        button = gtk.Button("Kate")
        button.show()
        subprocess.Popen('kate')
Ist das so richtig?

MfG
Hanes
BlackJack

@Hannes_1: Nein das ist so nicht richtig -- was Dir ein einfacher Versuch es auszuführen auch gezeigt hätte.

Du solltest vielleicht erst einmal das Tutorial aus der Python-Dokumentation durcharbeiten um die Python-Grundlagen zu lernen und dann ein Gtk-Tutorial um die Grundlagen von Gtk-Programmierung zu lernen.
Hannes_1

Hallo,

als Anfänger in Sachen programmierung wurde mir im LINUX-Forum folgendes gepostet:
Es gibt auch ein deutsches Forum [ http://www.python-forum.de/ ] mit vielen ziemlich kompetenten Programmierern
(von denen einige nach meiner Erfahrung aber leider nicht immer ganz so nett sind).
Ich hoffe, dass stimmt nicht.
Leider habe ich mit folgendem Zitat meine Probleme.
Du solltest vielleicht erst einmal das Tutorial aus der Python-Dokumentation
durcharbeiten um die Python-Grundlagen zu lernen und dann ein Gtk-Tutorial
um die Grundlagen von Gtk-Programmierung zu lernen.
Folgendes:
Wenn ich in einem KFZ-Forum nach der Funktion einer Lambda-Sonde frage und die Antwort bekommme,
Lerne erst mal KFZ-Mechankier, dann wird Dir das mit der Lambda-Sonde schon klar,
hilft mir dass eigentlich nicht weiter.
Ich möchte erst mal ein kleines Erfolgserlebnis um zu prüfen, ob Python was für mich ist.

Daher suche ich einen fertigen Code. Ein kleines Fenster mit einem Button soll sich öffnen.
Wenn ich auf den Button klicke, soll der Editor KATE starten.


Mfg
Hannes
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nett != arbeiterledigend.

BlackJacks Äusserung hat folgenden Hintergrund: GUI ist schwierig. Und noch schwieriger wenn man die Grundlagen wie OOP auf die GUIs aufbauen nicht verstanden hat. Hier braucht man z.B. Funktionsobjekte.
Und dann fehlen dir noch die Grundlagen zu GUI-Entwicklung und pyGTK im Besonderen, wenn du es denn wirklich schnell haben willst, fang hier an: http://www.pygtk.org/pygtk2tutorial/ch- ... ction.html

Mit (py)GTK hab ich selbst noch nicht gearbeitet darum kann ich dir nicht sagen, wie man den Button richtig mit dem Funktionsobjekt verbindet.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Naja, man muss halt das Clicked-Signal mit einer Callback-Funktion verbinden, die Subprocess startet. Ist jetzt echt nicht so schwer.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Yaso
User
Beiträge: 30
Registriert: Freitag 1. April 2011, 08:00

@ Hannes_1: Es wird einfach nicht gern gesehen, wenn Leute kommen und nach fertigen Lösungen fragen. Dieses Forum ist dazu da Leuten, die sich mit Python auseinandersetzen, zu helfen wenn sie nicht weiterkommen nachdem diese die entsprechenden Tutorials durchgearbeitet haben, bei dem erste Erfolgserlebnise kommen :)

Des weiteren ist nicht klar ob du blutiger Anfänger mit Python oder allgemein Programmieren bist. Spontan sag ich mal, dass du schon ein Paar Erfahrungen mit Programmieren gesammelt hast, Python aber deiner ersten Programmiersprachen ist.

Zu deiner exakten Frage:
Welchen Code muss ich einsetzen, damit beim Drücken des Buttons ( Kate ) der Editor "Kate" gestartet wird?
Bei deinem Code weiss man auch nicht ob du "das drumherum" auch schon codiert hast. Ich nehme mal an dass du das auch schon gemacht hast, deshalb fahre ich an dieser Stelle fort (ungetestet):

Code: Alles auswählen

import subprocess
# Vertikale Box
        vbox = gtk.VBox(True, 1)
        button = gtk.Button("Kate")
        button.connect("clicked", self.startKate)
        vbox.pack_start(button)
        vbox.show_all()

    def startKate(self, pWidget)
        # hier der code vom ms4py, da ich auf win arbeite
        subprocess.Popen('kate')

BlackJack

@Hannes_1: Wie kannst Du ein Erfolgserlebnis haben wenn Dir jemand fertigen Code gibt? Da hast Du doch gar nichts selber erreicht?

Wenn Du wissen willst ob Python etwas für Dich ist, dann musst Du Dich schon selbst mit der Sprache auseinander setzen. Am besten halt mit den Grundlagen und nicht gleich mit GUI-Programmierung. Das würde ich einem Anfänger nämlich nicht unbedingt für den Start empfehlen.

Man fängt normalerweise mit den Grundlagen an. Linear ablaufender Code. Dann die Kontrollstrukturen für bedingt ausgeführten Code (``if``/``else``) und Wiederholungen (``for``/``while``). Die Grunddatenstrukturen kennenlernen. Dann Aufteilen von Programmen in Funktionen. Ausnahmen und ihre Behandlung. Objektorientierte Programmierung. Und dann erst GUIs, weil damit dann ereignisorientierte Programmierung neu zu den *ganzen anderen Sachen* hinzu kommt, die alle aufeinander aufbauen. Wenn Du mit GUI Programmierung den Anfang machst, hast Du diese ganzen, teils komplexen Themen auf einmal am Hals.

Ansonsten würde man in einer echten Anwendung die GUI wahrscheinlich eher mit Glade entwerfen, statt per Hand zu schreiben. Ob Dir die Python/Gtk+-Kombination zusagt, sieht man also eher an einem Stück Code der Glade verwendet. Die mit Glade erzeugte UI-Beschreibung:

Code: Alles auswählen

<?xml version="1.0"?>
<interface>
  <requires lib="gtk+" version="2.16"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkWindow" id="window">
    <property name="border_width">10</property>
    <property name="title" translatable="yes">Start Kate Window</property>
    <signal name="destroy" handler="on_window_destroy"/>
    <child>
      <object class="GtkButton" id="start_kate">
        <property name="label" translatable="yes">_Kate</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">True</property>
        <property name="use_underline">True</property>
        <signal name="clicked" handler="on_start_kate_clicked"/>
      </object>
    </child>
  </object>
</interface>
Und das passende Python-Programm dazu:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from subprocess import Popen
import gtk


class App(object):
    def __init__(self):
        builder = gtk.Builder()
        builder.add_from_file('test.builder')
        self.window = builder.get_object('window')
        builder.connect_signals(self)
    
    def on_window_destroy(self, _window):
        gtk.main_quit()
    
    def on_start_kate_clicked(self, _button):
        Popen('kate')


def main():
    app = App()
    app.window.show_all()
    gtk.main()


if __name__ == '__main__':
    main()
Antworten