LINUX.ORG.RU

Программирование под GTK3

 , ,


1

0

Загорелся идеей написать несколько утилит для конфигурирования LXDE.

Подскажите пожалуйста, на чем ПРОЩЕ это делать?

Пытаюсь писать используя Python Gtk, но то ли Gtk такой дебильный, то ли питон не может. Подозреваю что на С все еще хуже будет.

Банальный пример: окно. В окне табы (Gtk.Notebook). Задача - инклудить другой питоновый файл при нажатии на таб. Все (!!!) примеры что нагуглил в интернете - меняют Gtk.Label. Отлично. А дальше ?

Ну почему нельзя было сделать вменяемую документацию? Ну блин проще поставить какой-нить маленький браузер, маленький веб-сервер, и писать средствами php+html+js на локалхосте.

В общем буду благодарен.


Да таких пейсателей было вагон и маленькая телега, все сдулись и ты сдуешься, когда примешь пару кубиков разупорина внутревенно.

anonymous ()

несколько утилит для конфигурирования LXDE

Да оно труп бро. Сваргань лучше для крысы чё нить.

anonymous ()

Все (!!!) примеры что нагуглил в интернете - меняют Gtk.Label. Отлично. А дальше ?

Проблема не в документации, а в твоём StackOverflow based programming. С какого перепугу в примерах для GTK+ должно описываться, как инклюдить файл в пайтоне?! Реализуй и прикрути вместо обработчика из примера.

anonymous ()

Ну блин проще поставить какой-нить маленький браузер, маленький веб-сервер, и писать средствами php+html+js на локалхосте.

🤦

olibjerd ★★★★★ ()
Ответ на: комментарий от vblats

Тогда я тебя прошу как пользователь: используй GTK2. Мне уже до жути надоели вечно ломающиеся темы в GTK3, не успел нормально настроить внешний вид, как опять всё поломано.

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Вот то же самое.

С табами проблем нет. Проблема (у меня по крайней мере) с инклудами.

Я не хочу вставлять сцука хидеры и импортировать функции. Я хочу разбить программу на несколько частей, и вставлять эти части на лету. Пусть даже скомпилированный файл получится один.

Вот пример.

using Gtk;

public class Example : Window
{
    private Notebook notebook;

    public Example()
    {
        this.title = "Notebook";
        this.set_default_size(200, 200);
        this.destroy.connect(Gtk.main_quit);

        notebook = new Notebook();
        this.add(notebook);

            var label = new Label(null);
            label.set_label("Tab1");
            // Рисую сцука кнопку в табе 1
            var button = new Button.with_label("Button in tab1");
            notebook.append_page(button, label);
            
            
            var label1 = new Label(null);
            label1.set_label("Tab2");

            // Файл b1.vala рисует кнопку в табе 2
            include("b1.vala"); <---------------------

            notebook.append_page(button1, label1);
            
        
    }

    public static int main(string[] args)
    {
        Gtk.init(ref args);

        var window = new Example();
        window.show_all();

        Gtk.main();

        return 0;
    }
}

И да, я не программер. Мне просто интересно попробовать.

vblats ()
Ответ на: комментарий от Vsevolod-linuxoid

Ахаха))) Тогда я лучше буду это рисовать div'ами в каком-нить встроенном браузере под lighttpd на локалхосте )))

vblats ()

Подскажите пожалуйста, на чем ПРОЩЕ это делать?

Подожди пока для реда запилят GTK-бекенд

loz ★★★★★ ()

Не, vala не вариант. Уж больно на С похож, много лишнего писать. Хочу шоб как в бейсике.

Между тем разобрался с ивентами GTK, пробую на питоне делать. Опять же инклуды не работают как положено.

Простой пример.

Файл1.py: Присваиваю значение какой-то переменной;

Файл2.py Вывожу эту переменную;

В Файл1.py пишу import Файл2.py.

Хрен там. Переменная is not defined.

Возникает вопрос: почему PHP может простые вещи, а питон (один из постулатов которого - разреженное лучше чем плотное) - не может?

vblats ()

А ты думал взял и с наскоку написал (не зная толком ни GTK, ни Python, ни архитектуру программ (что там вообще реально происходит за красивыми обертками))? Без довольно большого опыта этот трюк не прокатит.

peregrine ★★★★★ ()
Ответ на: комментарий от peregrine

Мне не нужны красивые обертки. И архитектуру программ я прекрасно понимаю. Отложим GTK, я уже третий час гуглю в интернете на эту тему, и решения нет.

Я хочу заинклудить в скрипт «a» скрипт «b» так чтоб скрипту «b» передались все переменные из скрипта «а», туда куда я захочу. Разве я прошу чего-то сверхъестественного ?

a1.py:

b=2
import a2

a2.py:

print(b)

[ntfs@chromebook ~]$ cat a1.py 
b=2
import a2
[ntfs@chromebook ~]$ cat a2.py 
print(b)
[ntfs@chromebook ~]$ 
[ntfs@chromebook ~]$ 
[ntfs@chromebook ~]$ python a1.py 
Traceback (most recent call last):
  File "a1.py", line 2, in <module>
    import a2
  File "/home/ntfs/a2.py", line 1, in <module>
    print(b)
NameError: name 'b' is not defined
[ntfs@chromebook ~]$ 

Что может быть непонятно в архитектуре программы из двух файлов, суммарным размером в три строки?)

Может быть ты мне подскажешь, как это сделать?)

vblats ()
Ответ на: комментарий от vblats

я уже третий час гуглю в интернете на эту тему

С нулевым уровнем владения языком нужно не гуглить, а брать учебник и читать его подряд.

и решения нет

a1

b=2
a2
import a1
print(a1.b)

python3 a2.py 
Worron ★★★ ()
Ответ на: комментарий от vblats

Я хочу разбить программу на несколько частей, и вставлять эти части на лету.

include(«b1.vala»); <---------------------

Разупорись. Никто не инклудит в середину программы. Используй Glide:

http://python-gtk-3-tutorial.readthedocs.io/en/latest/builder.html

https://habrahabr.ru/post/44755/

http://www.pygtk.org/articles/pygtk-glade-gui/Creating_a_GUI_using_PyGTK_and_...

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

подтверждаю. подключать и создавать надо все сразу, только в случае плагинов или оооочень больших программ, и то конвеер нуден а не инлкюд

anonymous ()
Ответ на: комментарий от vblats

Отложим GTK, я уже третий час гуглю в интернете на эту тему, и решения нет.

А зачем в интернете искать то? Возьми да и посмотри как на твоем компе работают уже существующие программы.

# file /usr/bin/* | grep Python | wc -l
110

justAmoment ★★★★★ ()
Ответ на: комментарий от kukuruku

Значит питон просто не умеет толковый инклуд, так и скажи.

Если для простой вставки куска другого когда нужно проходить целый курс - от такого языка лучше держаться подальше.

vblats ()
Ответ на: комментарий от vblats

Вместо инклуда в питоне божественные импорты, то, что ты не можешь их осилить, сугубо твоя личная половая проблема, не питона.

kukuruku ()
Последнее исправление: kukuruku (всего исправлений: 1)
Ответ на: комментарий от justAmoment

Я наверное не слишком понятно выразился, или это на ЛОРе так принято: но я не просил учить меня писать на питоне, я спросил можно ли решить одну простую задачу. ОЧЕНЬ ПРОСТУЮ, в три строки. Судя по ответам, ее попросту нельзя решить.

vblats ()
Ответ на: комментарий от vblats

я спросил можно ли решить одну простую задачу.

Ты херню спросил.

vvn_black ★★★★★ ()
Ответ на: комментарий от kukuruku

Давай без этой лабуды. Если бы решение было - ты бы уже с радостью его написал, как и другие в интернете. Но питон просто этого не может.

vblats ()
Ответ на: комментарий от vblats

Я не рисовал интерфейсы на pygtk, но то, что ты написал здесь:

a1.py:

b=2
import a2

a2.py:

print(b)

Ересь несусветная. Выше написали как надо. Ты пытаешься что-то сделать на питоне, опираясь на свой опыт в php, а это неправильно.

kukuruku ()
Последнее исправление: kukuruku (всего исправлений: 1)
Ответ на: комментарий от anonymous

подтверждаю. подключать и создавать надо все сразу, только в случае плагинов или оооочень больших программ, и то конвеер нуден а не инлкюд

Ну...Как надо - думаю лучше решать тому, кто пишет :)

vblats ()
Ответ на: комментарий от vblats

Возникает вопрос: почему PHP может простые вещи, а питон (один из постулатов которого - разреженное лучше чем плотное) - не может?

Потому что ты пытаешься писать PHP-скрипт на питоне. Пиши PHP-скрипты на PHP, а на питоне пиши питон-скрипты.

Import — это работа с модулями, которых в PHP просто нет. Для этого даже название придумали: «Post PHP Shock Syndrome». Прочитай http://alanstorm.com/python_imports_for_php_developers/. Может, поймёшь.

И кстати, в питоне есть аналог include из PHP, он называется execfile(). О нём почти все активно забывают, потому что его использование в коде — дикость.

i-rinat ★★★★★ ()
Ответ на: комментарий от vblats

/thread

я за бан дебила, куда скинуть оплату?

anonymous ()
Ответ на: комментарий от vblats

SOLUTION

не знаю чего там у автора с головой, вот набросал ему минимальный пример, но ДНК уже не пофиксить, это да

~ $ cat a.py
def get_data():
    return "data a"

~ $ cat b.py
def get_data():
    return "data_b"

~ $ cat c.py

def tab1():
    import a
    print(a.get_data())

def tab2():
    import b
    print(b.get_data())

tab1()
tab2()
~ $ python c.py
data a
data_b
~ $
anonymous ()

пхп-макака не смогла вникнуть в базу другого языка, тебе лучше писать на локалхосте и пхп, правда, друг

причем тут жтк, пистон и все остальное? ну почитай недельку книжку про синтаксис, в пистоне все можно, это динамический язык, просто не путай инклюды и импорты. инклюды делает препроцессор просто собирая код по кускам, а импорты испорняют подключаемый код, собирая среду а не текст.

anonymous ()
Ответ на: комментарий от anonymous
def on_click():
 # тут где меняют лабел в примера
 import my_module
 my_module.my_tab()


если имя модуля динамическое, можешь использовать __import__, чтоб не привязываться в коде к my_module


мы тебе все разжовывать должны или что, дураха? летез со своим невежеством еще и верещит, пздц. стыдно должно быть, стыдно.
anonymous ()

Задача - инклудить другой питоновый файл при нажатии на таб

Что значит «заинклудить»?

nikolnik ★★★ ()

и, макака, тебе не приходило в голову что если нет примеров твоего НУЖНО то так просто делать не принято и вредно? или ты один гений, решаешь как надо, ну так и решай, хули свое говно притащил на люди?

anonymous ()
Ответ на: комментарий от nikolnik

не обращай внимания на дебила, санитары подъезжают, пистон оказался не пыхыпы, разрыв шаблона у парня

anonymous ()
Ответ на: комментарий от vblats

Я не хотел этого делать, правда. Но чем хуже - тем лучше. Я тебе предлагаю пхп-вей. Ты можешь считать питоновский файл в строку и выполнить через eval(). Удачи.

nikolnik ★★★ ()
Ответ на: комментарий от kukuruku

Они далеко не божественные, так, среднячок.

loz ★★★★★ ()

привыкай: отсутствие вменяемой документации, и, уж тем более, туториалов - это норма для GTK

anonymous ()
Ответ на: комментарий от EXL

Кстати да. На PHP все просто, понятно, удобно. Жаль только GTK2 :(

vblats ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.