Перейти к содержимому


Фотография

[OC] "Лёгкая" библиотека GUI

gui

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 43

#31 Оффлайн   Zer0Galaxy

Zer0Galaxy

    The Lord of the Pings

  • Автор темы
  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 062 сообщений

Награды

                             

Отправлено 18 Апрель 2016 - 16:55

Думаю, в каждую процедуру ButtonХonClick неплохо бы добавить фразу:

Label1.caption=en

  • _Star_Craft_ это нравится

#32 Оффлайн   Laine_prikol

Laine_prikol

    Интересующийся

  • Пользователи
  • Pip
  • 12 сообщений

Отправлено 29 Апрель 2016 - 20:59

Очень простая и удобная, класс, автор продолжай!



#33 Оффлайн   Pofigist

Pofigist

    Пользователь

  • Пользователи
  • PipPipPip
  • 51 сообщений
  • ГородМосква

Отправлено 30 Апрель 2016 - 10:04

...

У меня очень глупый вопрос :D

"TComponent.__index = TComponent" позволяет обращаться в формате "Бла-бла-бла:функция()"? Ну через двоеточие, короче? :D



#34 Онлайн   Fingercomp

Fingercomp

    Видимый невидимый

  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 697 сообщений

Награды

                                      

Отправлено 30 Апрель 2016 - 10:34

TComponent.__index = TComponent — это чудеса метамагии.

Есть класс TComponent. При создании нового объекта ему присваивается класс как метатаблица. Однако методы и пр. не копируются. В объекте их нет, по сути. Метапараметр __index задаёт, где искать недостающие методы.

Сначала, например, он будет искать значение в таблице объекта, а потом — в таблице __index (то есть, в классе).



#35 Оффлайн   SDV

SDV

    #!/usr/bin/env python

  • Пользователи
  • PipPipPipPipPipPipPip
  • 512 сообщений
  • ГородO.R.E.N.B.U.R.G.

Награды

     

Отправлено 09 Июль 2016 - 13:23

Левый щелчок мыши на окне переведет компонент в режим ввода текста. Завершение ввода осуществляется нажатием клавиши Enter. После чего вызывается функция-обработчик, если она определена. Функция принимает один параметр - указатель на компонент, который ее вызвал.

Zer0Galaxy, то ли лыжи не едут, то ли я еб***тый :blink:

Объясни на примере как сделать чтобы то что ввел в инпут можно потом вывести на экран (или вообще в другую переменную).

Не пойму просто как вытянуть переменную окна ввода в функцию печати на экран.

Пример:

function text(a)
return print(a)
end

Edit1=Form1:addEdit(10,10,function() text(??Какую переменную пишем??) end)


#36 Оффлайн   Zer0Galaxy

Zer0Galaxy

    The Lord of the Pings

  • Автор темы
  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 062 сообщений

Награды

                             

Отправлено 09 Июль 2016 - 13:48

function text(a)
return print(a)
end
 
Edit1=Form1:addEdit(10,10,function() text(Edit1.text) end)

 

 

text - строка текста, введенного в окно ввода.

(или вообще в другую переменную).
local a=Edit1.text 


#37 Оффлайн   SDV

SDV

    #!/usr/bin/env python

  • Пользователи
  • PipPipPipPipPipPipPip
  • 512 сообщений
  • ГородO.R.E.N.B.U.R.G.

Награды

     

Отправлено 09 Июль 2016 - 13:49

text - строка текста, введенного в окно ввода

Во спасибо.

Видимо уже разучился читать до конца документацию :D



#38 Оффлайн   SDV

SDV

    #!/usr/bin/env python

  • Пользователи
  • PipPipPipPipPipPipPip
  • 512 сообщений
  • ГородO.R.E.N.B.U.R.G.

Награды

     

Отправлено 09 Июль 2016 - 15:00

Команда создает на форма Form1 надпись и возвращает указатель на вновь созданный объект.

Zer0Galaxy, опять нубаский вопрос ;)

Вот есть объект надпись, как сделать чтобы он прорисовывал все что есть в цикле?

 

Покажу на примере, есть инпут туда пишем число, enter - и в лейбле показывается 1, 2, 3 и т.д. Но не все сразу числа, а именно по одной (как в секундомере).

Вообще это возможно с твоей либой прокрутить?

Мне вообще нужно много чего что в цикле (for или while true) выводить (обновлять) данные (чтобы сами перерисовывались и что бы сам вызывал отображение надписей в циклах через кнопку).

Но они всего лишь один раз вызываются и все. Перерисовываться почему-то не хотят ( :redraw() ) :(

forms=require("forms")
Form1=forms.addForm() 

function label(a)
for i = 1, a do 
	Label1=Form1:addLabel(2,2,i)
	Label1:redraw()
end
return b
end

Edit1=Form1:addEdit(10,10,function() label(Edit1.text) end)

forms.run(Form1)


#39 Оффлайн   Zer0Galaxy

Zer0Galaxy

    The Lord of the Pings

  • Автор темы
  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 062 сообщений

Награды

                             

Отправлено 09 Июль 2016 - 15:14

Вызывать в цикле функцию addLabel нет необходимости. Каждый вызов такой функции создает новый компонент-метку, тебе же нужно просто изменить надпись на уже существующей метке. Сделать это можно изменив поле caption и перерисовав метку:

Label1.caption="New caption"
Label1:redraw()

Теперь о том по какому событию происходит смена надписи. Если ты просто вставишь эту смену в цикл

for i=1,10 do
  Label1.caption=i
  Label1:redraw()
end

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

Можешь для этого использовать компонент-таймер



#40 Оффлайн   SDV

SDV

    #!/usr/bin/env python

  • Пользователи
  • PipPipPipPipPipPipPip
  • 512 сообщений
  • ГородO.R.E.N.B.U.R.G.

Награды

     

Отправлено 09 Июль 2016 - 15:22

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

Ну почти, если быть точнее просто автообновляемые переменные чтобы не перезагружать по 100500 раз прожку чтобы посмотреть измененные данные (к примеру та же информация о computer.energy()).

 

то увидишь лишь последнее значение метки,

Жаль конечно, придется тогда "читерить" в этом случаи :D

 

Все равно спасибо за консультацию, разраб :smile9:



#41 Оффлайн   Zer0Galaxy

Zer0Galaxy

    The Lord of the Pings

  • Автор темы
  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 062 сообщений

Награды

                             

Отправлено 09 Июль 2016 - 15:41

Вот пример работы того, о чем я говорил

forms=require("forms") --подключаем либу
Form1=forms.addForm()  --создаем форму

Label1=Form1:addLabel(2,2,"0") -- создаем метку

local Lmax=0 -- тут будем хранить крайнее значение метки

function onTime()
  if Label1.caption>=Lmax then Timer1:stop() return end -- если достигли конца, тормозим таймер
  Label1.caption=Label1.caption+1                       -- иначе, увеличиваем метку
  Label1:redraw()
end

Timer1=Form1:addTimer(1,onTime) -- создаем таймер с периодом 1 секунда
Timer1:stop()                   -- пока притормозим его

Edit1=Form1:addEdit(10,10, function() -- создаем поле ввода, по которому
   Label1.caption=0                   -- сбрасываем метку в ноль
   Lmax=tonumber(Edit1.text)          -- задаем крайнее значение
   Timer1:run()                       -- и запускаем таймер
end)

forms.run(Form1) -- старт всей конструкции

А вот пример с computer.energy

forms=require("forms") --подключаем либу
Form1=forms.addForm()  --создаем форму

Label1=Form1:addLabel(2,2) -- создаем метку

Timer1=Form1:addTimer(1,function() -- создаем таймер с периодом 1 секунда
  Label1.caption=computer.energy() -- в котором обновляем значение метки
  Label:redraw()                   -- и перерисовываем ее
end)

forms.run(Form1) -- старт всей конструкции


#42 Оффлайн   SDV

SDV

    #!/usr/bin/env python

  • Пользователи
  • PipPipPipPipPipPipPip
  • 512 сообщений
  • ГородO.R.E.N.B.U.R.G.

Награды

     

Отправлено 09 Июль 2016 - 15:42

Вот пример работы того, о чем я говорил

Спасибо, попробую эту конструкцию впихнуть себе. Глядишь и получиться "считерить" :smile9:

 

Было бы конечно интересно если бы lua (?), opencomputers (?) могли поддерживать многозадачность (или многопоточность, кому как интереснее :D , про эту либу я знаю. вот бы ее в эту гуи либку воткуть бы), чтобы тут например сами по себе обновлялись данные на экране в цикле, и ты же мог юзать прожку и не ждать пока закончится цикл (с while вообще фиг что с делаешь)...



#43 Оффлайн   Zer0Galaxy

Zer0Galaxy

    The Lord of the Pings

  • Автор темы
  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 062 сообщений

Награды

                             

Отправлено 09 Июль 2016 - 15:50

Ну, если говорить строго, данные на экране обновляются не в цикле, а с периодом. Именно для этого и предназначен компонент-таймер (см. пример с computer.energy). Применение таких таймеров реализует своего рода многопоточность ибо работа таймера никак не должна влиять на работу остального кода.

К стати, не рекомендую использовать многопоточность на основе thread совместно с forms. Они могут передраться.



#44 Оффлайн   SDV

SDV

    #!/usr/bin/env python

  • Пользователи
  • PipPipPipPipPipPipPip
  • 512 сообщений
  • ГородO.R.E.N.B.U.R.G.

Награды

     

Отправлено 09 Июль 2016 - 16:11

К стати, не рекомендую использовать многопоточность на основе thread совместно с forms. Они могут передраться.

Окей, если бы все было с ними хорошо, то они бы давно бы были как одно единое целое  B-) 

 

P.S. Самое страшное, что сейчас очень сложно найти более или менее адекватную (и современную), простую в использовании GUI либу чтобы она могла включать в себя много чего....

На форуме я в частности насчитал лишь 3 штуки (возможно и больше есть, но эти либы в топе раздела): твоя, либа от Крутого, ну и всеми забытого нами господина Элиты, мать его, ECS :D







Темы с аналогичным тегами gui

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных


Яндекс.Метрика