LINUX.ORG.RU

Вопрос о pygubu-designer, как обратиться к элементу форму

 ,


0

1

В pygubu-designer создаю форму form.ui

<?xml version='1.0' encoding='utf-8'?>
<interface version="1.3">
  <object class="tk.Frame" id="frame1">
    <property name="height">200</property>
    <property name="width">200</property>
    <layout manager="pack">
      <property name="side">top</property>
    </layout>
    <child>
      <object class="tk.Entry" id="entry1">
        <property name="text" translatable="yes">набранный текс</property>
        <bind sequence="&lt;KeyPress&gt;" handler="callback" add="" />
        <layout manager="pack">
          <property name="side">top</property>
        </layout>
      </object>
    </child>
  </object>
</interface>

Далее создаю файл start_form.py с кодом:


#!/usr/bin/python3
import pathlib
import tkinter as tk
import pygubu
PROJECT_PATH = pathlib.Path(__file__).parent
PROJECT_UI = PROJECT_PATH / "form.ui"


class FormApp:
    def __init__(self, master=None):
        self.builder = builder = pygubu.Builder()
        builder.add_resource_path(PROJECT_PATH)
        builder.add_from_file(PROJECT_UI)
        # Main widget
        self.mainwindow = builder.get_object("frame1", master)
        builder.connect_callbacks(self)

    def run(self):
        self.mainwindow.mainloop()

    def callback(self, event=None):
        pass



if __name__ == "__main__":
    root = tk.Tk()
    app = FormApp(root)
    app.run()

Как к примеру в функции callback (bind = KeyPress) обратится к элементу формы entry1 и получить вводимые данные для дальнейшей работы. К примеру преобразовать в верхний регистр.

Должно быть что-то типа этого, но тут я неправильно обращаюсь к entry1:

    def callback(self, event=None):
        print(self.mainwindow.entry1.get().upper())


Последнее исправление: Alecsandr1980 (всего исправлений: 6)

Нашел ответ, пишу кому интересно:

В дизайнере в свойствах элемента нужно указать textvariable к этой переменной и будет дальнейшее обращение.

в UI файле будет создана строка (я дал имя переменной entry1_var)

<property name="textvariable">string:entry1_var</property>

А обращаться в файле .py можно так:

self.builder.tkvariables['entry1_var'].get()

Немного странный подход.

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

TKINTER прекрасная библиотека для разработки, как под WINDOWS, LINUX и MAC. Это для простых разработок графического интерфейса. Быстро и эффективно.

А вот кому нужен wayland и кто его поддерживает большой вопрос.

wayland ценю и они молодцы, желаю развития но на сегодня…

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

Так это и есть развитие. Какое ещё развитие ты хочешь? Сам протокол и окружения его использующие уже достаточно готовы. А вот приложения и некоторые тулкиты такие, как tkinter - ещё нет. По этому я обсираю и продолжу обсирать всё что не поддерживает вейланд нативно.

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

почему не QtCreator например?

Не QT, потому что делал проект на tkinter… Я случайной узнал что есть PAGE и PYGUBU для tkinter. Вот и решил попробовать.

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

Я много лет ваял гуйню на ткинтер (мы обычно гуйней не занимаемся, но раз в году приходится). В итоге перешел на PyQt. Причин много - это и качество гуя (у Qt он лучше), и поддержка/простота развертывания…

Хотя мне написание любой гуйни отвратительно само по себе, а Qt еще и имеет какую то инопланетную логику, все же Qt по совокупности характеристик оказался лучше (для наших задач).

А вот кому нужен wayland

В настоящий момент wayland это глюкодром.

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

Под другими WM такой проблемы у браузера нет, так что это проблема wayland.

Мне, как конечному пользователю, вообще пофик чьи именно это проблемы, так как в итоге это МОИ проблемы. У меня много онлайн-конференций, экран надо расшаривать часто, и это очень сильно мешает. Мне надо что бы оно работал а не плясать с бубном выясняя что именно там и кого отвалилось.

Пользователи ведь такие сцуки, голосуют ногами. Вот и я проголосовал, а мантайнерам бубунты которые wayland воткнули по умолчанию передаю мои лучи ненависти. Я бы ушел на другой дистр, так там глюков еще больше чем в бубунте…

AntonI ★★★★★
()