Как Вы делаете GUI Linux?

Я поклонник пакета gridGraphics. По какой-то причине у меня были проблемы с gridBase.

library(ggplot2)
library(gridGraphics)
data.frame(x = 2:10, y = 12:20) -> dat
plot(dat$x, dat$y)
grid.echo()
grid.grab() -> mapgrob
ggplot(data = dat) + geom_point(aes(x = x, y = y)) 
pushViewport(viewport(x = .8, y = .4, height = .2, width = .2))    
grid.draw(mapgrob)

23
задан John T 12 December 2008 в 01:37
поделиться

8 ответов

X отвратительный слой к программе для и, несмотря на Ваше намерение избежать Java, QT или любого из превосходных уровней абстракции UI, Вы будете вредить себе путем кодирования к тому уровню. Я сделал его (давным-давно, когда Мотив был в своем младенчестве на платформе, мы использовали), и я буду не , делают это снова, если был более легкий путь.

Ваше использование фразы "собственный компонент, программирующий", смущает меня немного. Если Вы хотите изучить собственное программирование, именно к API Вы принимаете решение звонить. Используя подобное обоснование, Вы не должны кодировать в C или, вместо этого выбирая ассемблер (или прямой машинный код), так как C предоставляет абстракцию аппаратным средствам.

, Если Вы хотите изучить X программирования, это прекрасно. Вы закончите с намного большим количеством управления Вашим интерфейсом, но почти все остальные будут превосходить Вас по характеристикам с точки зрения предоставления программного обеспечения. Самостоятельно, я предпочел бы кодировать к высокоуровневому API, который я могу использовать на многих платформах - он дает мне и более быстрые сроки доставки и больше потенциала рынка.

Вы не создаете дом из атомов, Вы создаете его из кирпичей. Мое предложение должно использовать инструменты, это - то, для чего они там.

65
ответ дан paxdiablo 29 November 2019 в 00:36
поделиться

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

No Вы не делают. Назад в ранней версии X11, как R1 или R2, я кодировал полное "Привет, мировую" программу в одном только Xlib.

Примерно 700 строк C.

Вы не хотите идти туда.

44
ответ дан Charlie Martin 29 November 2019 в 00:36
поделиться

Я предполагаю, что Вы могли записать код C непосредственно против Xlib, но Вы закончите тем, что воссоздали всю функциональность, что GTK + или QT обеспечивают, что X не делает один.

13
ответ дан Technical Bard 29 November 2019 в 00:36
поделиться

Unix (и следовательно, Linux) на самом деле не определяет ничего, чтобы сделать с графический интерфейсами пользователя. X, то, которое является наиболее часто используемым, не определяет ничего, чтобы сделать с виджетами или стилями или чем-либо той природы - она затронута главным образом с рисованием примитивов и обработки событий. По существу, если бы Вы хотели записать в чистом X, Вы определили бы форму и поведение каждого элемента на экране. Если бы Вы были достаточно сумасшедшими отказаться X, Вы работали бы на графическом уровне кадрового буфера...

Вы - более обеспеченное использование [приблизительно 111] инструментарий - при поиске легкого веса, почему бы не попробовать FLTK?

10
ответ дан shash 29 November 2019 в 00:36
поделиться

GTK, QT и wx являются инструментариями, которые основываются X для обеспечения более дружественного API.

, Если Вы не используете существующий инструментарий, необходимо будет записать вещи на очень низком уровне - непосредственно обрабатывающий события от нажатия мыши и события клавиатуры. Если Вы хотите кнопку или текстовое поле, необходимо будет записать ему сами использование низкого уровня xlib примитивы.

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

4
ответ дан Andrew Kennan 29 November 2019 в 00:36
поделиться

Нет просто никакой такой вещи как "собственный компонент" в этом случае. Windows и OS X просто имеют официальную опцию, в то время как X не делает.

4
ответ дан ironfroggy 29 November 2019 в 00:36
поделиться

"Собственный" интерфейс для Linux & большей частью другого подобного Unix OSs является Xlib, API самого низкого уровня C для X11.

GTK, QT & другие - все (насколько я знаю), реализованный с точки зрения Xlib в их ядре. Как другие сказали, Xlib дает Вам максимальный контроль, но необходимо будет работать на него (и другие могут выполнить круги вокруг Вас с точки зрения поставки продукта).

Как ориентир, я лично реализовал довольно многофункциональный & современный (т.е. текучий) межплатформенный (Win32 + X11) библиотека GUI в C++. Общее количество является приблизительно 29 KLOC C++, которого приблизительно 2 500 строк каждый требовался для X11 & шиммирование Win32. Остальное для независимых от платформы реализаций Виджета. Если Вы не готовы взять на себя обязательство как этот, я настоятельно рекомендую идти с одной из высокоуровневых библиотек (QT, вероятно, был бы моим выбором, хотя я не могу выдержать подход препроцессора).

BTW, большой плюс для Xlib является своя необработанная мобильность - любое поле Unix с экраном будет иметь его, и это может быть сделано работать над Windows & OS X также.

3
ответ дан Drew Hall 29 November 2019 в 00:36
поделиться

Я предложил бы lesstif/motif также. Это также создает сверху X, и кривая обучения, по-моему, не так круто как GTK или QT UI, который Вы создаете с ним, не будут столь же сложными как, которые Вы могли создать с GTK или QT все же. Больше информации может быть найдено здесь .

, Поскольку другие упомянули, что Вы, вероятно, не хотите к X, это - боль.

1
ответ дан Twotymz 29 November 2019 в 00:36
поделиться