X



トップページLinux
926コメント335KB

GTK+プログラミング

レス数が900を超えています。1000を超えると表示できなくなるよ。
0803login:Penguin
垢版 |
2017/05/24(水) 22:24:13.70ID:0wlGVdsK
なるほど
ffmpegほどキ○ガイな方針ではないのね
0805login:Penguin
垢版 |
2017/06/24(土) 17:57:54.57ID:cdtIIsj7
IconViewをラベルだけで使うみたいなもんかね
Pythonですまんが

from gi.repository import Gtk
from gi.repository import GObject

bname = ["Arlo", "Cosmo", "Elmo", "Hugo", "Jethro",
        "Laszlo", "Milo", "Nemo", "Otto", "Ringo",
        "Rocco", "Rollo"]
model = Gtk.ListStore(GObject.TYPE_STRING)
for n in bname:
    t = model.append()
    model.set(t, 0, n)
view = Gtk.IconView(model)
view.set_text_column(0)
win = Gtk.Window()
win.add(view)
win.show_all()
win.connect("delete-event", Gtk.main_quit)
Gtk.main()
0806804
垢版 |
2017/06/26(月) 15:14:10.11ID:y5aZk+CQ
>>805
なるほど、IconView でテキストか。
できたできた、
どうもありがとう!
0807login:Penguin
垢版 |
2017/07/04(火) 04:00:58.40ID:Rpvk2+Dl
gtk勉強しようかと思うんだけどもうオワコン?
でもQtバインディングよりgtkバインディングのほうが多いしなぁ...

gtk4で大幅に進化したりしないかな
0808login:Penguin
垢版 |
2017/07/04(火) 13:24:32.59ID:8Z5Rtw2V
両方やってみればいい
考えてるほど時間も労力も掛からないよ
0809login:Penguin
垢版 |
2017/07/11(火) 15:53:30.96ID:9jKfhw2z
window のサイズをいい感じ?にできる関数があるか、
お知恵を拝借。

(1) やったこと
GtkWindow に対して、GtkToolbar しか置いてない。
toolbar に、gtk_toolbar_insert() でボタンを4つ横並びに置く。
window のサイズは未指定。

(2) 動作確認
右の方のボタンが矢印でまとめられて?
メニューみたいに表示される。
(横幅を広げると、横並びに表示される)

(3) 所感
相当前に gtk_toolbar_append_element() (deprecated) 等で
配置したときは、横並びに表示されて、
window のサイズはちょうどいい具合に表示されていた(ように思う)。

ボタンが、矢印でまとめられないで、横並びに表示されるように
window のサイズをいい感じ?にできる関数がある?
(意味わかんなかったらゴメンw)
gtk_widget_set_size_request() でざっくりで指定しないとダメかなあ。
0810login:Penguin
垢版 |
2017/07/11(火) 21:23:00.28ID:w3xO5s8F
>>809
直接の答えは分からないけど、何の工夫もせずにやったらボタンが4つ並ぶ状態で起動すると思う

public class ToolbarTest : Gtk.Window {
  public ToolbarTest () {
    destroy.connect (Gtk.main_quit);
    var tb = new Gtk.Toolbar ();
    foreach (var n in new int[] {1,2,3,4}){
      tb.add (new Gtk.ToolButton (null,@"Button$n"));
    }
    add (tb);
    show_all ();
  }

  public static int main (string[] args) {
    Gtk.init (ref args);
    new ToolbarTest ();
    Gtk.main ();
    return 0;
  }
}
0811login:Penguin
垢版 |
2017/09/24(日) 13:44:57.02ID:AWmycg5C
toolbar に付いている「つまみ」
(アプリでよくある「toolbar を固定する」みたい感じなのをオフにすると現れる、持つ部分?)

あれは GTK+ では、どうやって出すのでしょうか?
0812login:Penguin
垢版 |
2017/09/24(日) 23:45:06.00ID:PwTxDy1k
GtkHandleBoxならdeprecatedだぞ
0813login:Penguin
垢版 |
2017/09/25(月) 09:15:38.26ID:bLbAubVC
VTEのspawnなんとかのAPIはいつになったらファイナライズされるのかね(怒
0814login:Penguin
垢版 |
2017/10/05(木) 21:14:42.06ID:c3KsIY0h
gtk4が気になってgtkの勉強始めようと思うんだけど初心者は何から始めるのがおすすめでしょうか?
0815login:Penguin
垢版 |
2017/10/10(火) 12:36:19.63ID:d/a7Ir8S
python3+gtk3で作るに際し
IDE (統合環境)みたいなのってある?

そう大げさなものでなくてよくて
コード補完(gtkのメソッドの)が
出来ればいいかなぐらいの感じなんだけど

もしくは大抵何が使われているのか
0817login:Penguin
垢版 |
2017/10/10(火) 15:07:12.53ID:6wfTcDmJ
あるいはvscodeにpythonプラグイン入れれば出来るかな
0819login:Penguin
垢版 |
2017/10/15(日) 20:41:28.01ID:IZYKuyT8
補足だけどpycharmでgtkの補完を行うにはちょっとした作業が必要みたい
https://stackoverflow.com/a/33646560

vscodeのほう(というかjediという補完ツール)も何かしら方法はあるっぽい?
0820login:Penguin
垢版 |
2017/11/01(水) 06:36:53.25ID:6RRJjvM+
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <cairo.h>

#define BITMAP_WIDTH (600)
#define BITMAP_HEIGHT (600)

GtkWidget *window;
GtkWidget *darea;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *button01;
GThread* thread;
volatile int execflag01;
int count;
int time_count;

static void do_drawing (cairo_t *, GtkWidget * widget);

struct
{
cairo_surface_t *image;
} glob;

static gboolean on_draw_event (GtkWidget * widget, cairo_t * cr, gpointer user_data)
{
cr = gdk_cairo_create (gtk_widget_get_window (widget));
do_drawing (cr, widget);
cairo_destroy (cr);
return FALSE;
}
0821login:Penguin
垢版 |
2017/11/01(水) 06:37:32.12ID:6RRJjvM+
続き
static void do_drawing (cairo_t * cr, GtkWidget * widget)
{
gfloat screen_width;
gfloat screen_height;
gfloat image_width;
gfloat image_height;
gfloat x_scaling;
gfloat y_scaling;
/* ディスプレイの全画面の大きさを取得 */
screen_width = gdk_screen_get_width (gdk_screen_get_default ());
screen_height = gdk_screen_get_height (gdk_screen_get_default ());
/* イメージの大きさを取得 */
image_width = cairo_image_surface_get_width (glob.image);
image_height = cairo_image_surface_get_height (glob.image);
x_scaling = 1.0;
y_scaling = 1.0;
cairo_scale (cr, x_scaling, y_scaling);
cairo_set_source_surface (cr, glob.image, 0, 0);
cairo_paint (cr);
}
0822login:Penguin
垢版 |
2017/11/01(水) 06:37:57.41ID:6RRJjvM+
続き
static void load_image ()
{
cairo_t *ic;
glob.image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, BITMAP_WIDTH, BITMAP_HEIGHT);
ic = cairo_create (glob.image);
//長方形の描画
{
//色の指定(外枠:Red,Green,Blue)
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
//長方形(x,y,width,height)を描画
cairo_rectangle(ic, 0.0, 0.0, BITMAP_WIDTH, BITMAP_HEIGHT);
//長方形の外枠を作る
cairo_stroke_preserve(ic);
//色を指定(塗りつぶし:Red,Green,Blue)
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
//長方形を塗りつぶす
cairo_fill(ic);
cairo_stroke (ic);
}
cairo_destroy (ic);
}
0823login:Penguin
垢版 |
2017/11/01(水) 06:38:38.92ID:6RRJjvM+
続き
static gpointer thread_func( gpointer data){
cairo_t *ic;
int i;
ic = cairo_create (glob.image);
{
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_rectangle(ic, 0.0, 0.0, BITMAP_WIDTH, BITMAP_HEIGHT);
cairo_stroke_preserve(ic);
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_fill(ic);
}
cairo_stroke (ic);
for (i = 0; i < count; i++) {
gdk_threads_enter();
{
cairo_set_source_rgb(ic, (i % 256) / 256.0, 0.0, (i % 256) / 256.0);
cairo_rectangle(ic, 0.0, (double)i, (double)BITMAP_WIDTH, 1.0);
cairo_stroke (ic);
}
gdk_threads_leave();
gtk_widget_queue_draw(darea);
usleep(time_count);
}
cairo_destroy (ic);
execflag01 = 0;
}
0824login:Penguin
垢版 |
2017/11/01(水) 06:39:29.00ID:6RRJjvM+
続き

static void on_button01_clicked(GtkWidget *button, gpointer user_data){
GError *error;
if (execflag01 == 0) {
execflag01 = 1;
count = BITMAP_HEIGHT;
time_count = 1000;
thread = g_thread_create( thread_func, (gpointer)darea, FALSE, &error);
}
}
0825login:Penguin
垢版 |
2017/11/01(水) 06:39:49.40ID:6RRJjvM+
最後
int main (int argc, char *argv[])
{
load_image ();
execflag01 = 0;
gtk_init (&argc, &argv);
gdk_threads_init();
gdk_threads_enter();
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width(GTK_CONTAINER(window), 5);
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
darea = gtk_drawing_area_new ();
gtk_box_pack_start(GTK_BOX(vbox), darea, FALSE, FALSE, 0);
gtk_widget_set_size_request(darea, BITMAP_WIDTH, BITMAP_HEIGHT);
button01 = gtk_button_new_with_label("Button01");
gtk_box_pack_start(GTK_BOX(vbox), button01, FALSE, FALSE, 0);

g_signal_connect(G_OBJECT(button01), "clicked", G_CALLBACK(on_button01_clicked), NULL);
g_signal_connect (G_OBJECT (darea), "draw", G_CALLBACK (on_draw_event), NULL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
gtk_window_set_title (GTK_WINDOW (window), "Cairo Test");
gtk_window_set_decorated (GTK_WINDOW (window), TRUE);
gtk_widget_set_size_request(window, 600, 630);
gtk_widget_show_all (window);
gtk_main ();
gdk_threads_leave();
cairo_surface_destroy (glob.image);
return 0;
}
0826login:Penguin
垢版 |
2017/11/01(水) 12:30:43.16ID:MSa06+/w
gtkmm っていう C++ のバインディングがあるんだけど,2011 年で 3.0 が出たきり更新の音沙汰がない。
C++ 向けの GTK+ バインディングでおすすめある?
0827login:Penguin
垢版 |
2017/11/01(水) 13:02:49.11ID:A1HFLP/N
事実上それしかないのでは
0829login:Penguin
垢版 |
2017/11/01(水) 16:12:00.92ID:1oQnySzL
gtkmmはgtk4に向けてc++14対応もしてるっぽいし結構期待してる
0831826
垢版 |
2017/11/01(水) 17:32:31.31ID:MSa06+/w
>>827
>>828
ありがとうございます。GNOME のリポジトリはついぞ覗いていませんでした。これで安心して使えます。
しかしパッケージマネージャで入手できる gtkmm が 2.4 と 3.0 というのはちょっと心許ないですね……。

誰か PR 投げてくれないかなぁ〜 (他力本願)
0832login:Penguin
垢版 |
2017/11/01(水) 18:17:48.95ID:eYINtNrh
>>831
2.4とか3.0とかはgtkmmの互換性での番号だと思うけどどうして心許ないの?
0833login:Penguin
垢版 |
2017/11/01(水) 18:19:19.00ID:A1HFLP/N
>>831
ためしに手元のUbunut 17.04 でバージョン見たら
Version: 3.22.0-1

ってなっとるでな
0834login:Penguin
垢版 |
2017/11/01(水) 18:55:06.19ID:1oQnySzL
gtk4が出るまでqt勉強する
0835login:Penguin
垢版 |
2017/11/01(水) 18:56:39.83ID:1oQnySzL
gtk4が出たらJD書き直そうや
いつまでもgtk2じゃ駄目でしょ
最近のgtkはカラー絵文字にも対応してるようだし
0836login:Penguin
垢版 |
2017/11/01(水) 19:11:17.65ID:6RRJjvM+
>>820はGTK+3でBITMAPを表示する方法がわからなかったので
ネットで調べてとりあえず作ってみたものです

それとgtk_widget_queue_draw()をスレッド側で使う場合
下記のようにしないとダメなようです

gdk_threads_enter();
gtk_widget_queue_draw(darea);
gdk_threads_leave();
0837login:Penguin
垢版 |
2017/11/01(水) 19:12:33.94ID:6RRJjvM+
デモとして違うのも作ってみました
>>820-825のプログラムのthread_func()関数を下のものに差し替えてみてください

static gpointer thread_func( gpointer data){
int i, j, col, i1, depth;
double xgap, ygap, xx, yy, a1, b1, x1, y1, tmp1, x2, y2;
double xcorner, ycorner, length;
cairo_t *ic;
int count01;
struct {
double xcorner;
double ycorner;
double length;
} param[8];

param[0].xcorner = -1.785666666666666e+000; param[0].ycorner = -2.508333333333312e-002;
param[0].length = 5.000000000000000e-002;

param[1].xcorner = -1.759984700520832e+000; param[1].ycorner = -1.518603515624978e-002;
param[1].length = 9.765625000000001e-005;

param[2].xcorner = -1.759906697591145e+000; param[2].ycorner = -1.515360514322895e-002;
param[2].length = 6.103515625000000e-006;

param[3].xcorner = -1.759901244004566e+000; param[3].ycorner = -1.515219028790770e-002;
param[3].length = 4.768371582031250e-008;

param[4].xcorner = -1.759901209723814e+000; param[4].ycorner = -1.515217680089193e-002;
param[4].length = 5.820766091346741e-012;

param[5].xcorner = -2.112213541666665e-001; param[5].ycorner = -7.939140624999994e-001;
param[5].length = 1.562500000000000e-003;
0838login:Penguin
垢版 |
2017/11/01(水) 19:13:17.37ID:6RRJjvM+
続き

param[6].xcorner = -2.238124999999996e-001; param[6].ycorner = -6.581041666666665e-001;
param[6].length = 1.250000000000000e-002;

param[7].xcorner = -2.137343749999995e-001; param[7].ycorner = -6.554270833333333e-001;
param[7].length = 3.906250000000000e-004;

ic = cairo_create (glob.image);
for (count01 = 0; count01 < 8; count01++) {
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_rectangle(ic, 0.0, 0.0, BITMAP_WIDTH, BITMAP_HEIGHT);
cairo_stroke_preserve(ic);
cairo_set_source_rgb(ic, 0.0, 0.0, 1.0);
cairo_fill(ic);

xcorner = param[count01].xcorner;
ycorner = param[count01].ycorner;
length = param[count01].length;
depth = 1000;

xgap = length / BITMAP_WIDTH;
ygap = length / BITMAP_HEIGHT;
xx = xcorner;
yy = ycorner;
for(j = 0; j < BITMAP_WIDTH; j++) {
ic = cairo_create (glob.image);
for(i = 0; i < BITMAP_HEIGHT; i++) {
a1 = xx; b1 = yy;
i1 = 0; x1 = 0; y1 = 0;
x2 = x1 * x1;
y2 = y1 * y1;
0839login:Penguin
垢版 |
2017/11/01(水) 19:13:57.79ID:6RRJjvM+
終わり
while ((i1 < depth) && (x2+y2 <=4)) {
tmp1 = x2 - y2 + a1;
y1 = 2 * x1 * y1 + b1; x1 = tmp1;
x2 = x1 * x1; y2 = y1 * y1; i1++;
}
if (i1 == depth) i1 = 0;
else i1++;
col = i1;
gdk_threads_enter();
cairo_set_source_rgb(ic, (col % 256) / 256.0, 0.0, 0.0);
cairo_rectangle(ic, (double)i, (double)j, 1.0, 1.0);
cairo_stroke(ic);
gdk_threads_leave();
xx = xx + xgap;
}
yy = yy + ygap; xx = xcorner;
if (j % 5 == 0) {
gdk_threads_enter();
gtk_widget_queue_draw(darea);
gdk_threads_leave();
}
usleep(1000);
}
gdk_threads_enter();
gtk_widget_queue_draw(darea);
gdk_threads_leave();
usleep(50000);
}
cairo_destroy (ic);
execflag01 = 0;
}
0840login:Penguin
垢版 |
2017/11/01(水) 20:23:13.63ID:1oQnySzL
コードは別のところに貼ってくれ
0841login:Penguin
垢版 |
2017/11/01(水) 20:39:13.35ID:A1HFLP/N
一般的なペーストビン使えば?
0842login:Penguin
垢版 |
2017/11/01(水) 20:49:04.40ID:MSa06+/w
GTK4 で JD 書き直すの?
0843login:Penguin
垢版 |
2017/11/01(水) 21:10:52.50ID:e2sx/G8f
2chでコード貼ると権利関係の問題が生じるから
普通は貼らない。
これ常識。
0844login:Penguin
垢版 |
2017/11/02(木) 07:34:01.28ID:DIoOuVfO
GTK+4から>>801-802の方針らしいので今GTK+使うなら3系が無難だと思う
0845login:Penguin
垢版 |
2017/11/02(木) 18:51:47.91ID:hOMy/o9B
本来なら、ソフトウェア板のGEditスレで聞くはずなんだろうけど、あまりにあっちのスレは心許ないので、こちらで聞かせて。

まず、GEditでAlt+n(nは1とか2とか3とかの番号)のショートカットキーを入力すると
現在開いてるタブの中から該当する番号のエディタタブをアクティブにしてくれるんだけど。。
https://help.gnome.org/users/gedit/stable/gedit-shortcut-keys.html.en

GEditのWordCompletionっていうプラグイン使ってるんだけど、
これはオートコンプリートみたいに単語を入力候補の中から選んで入力支援作業をしてくれるプラグインなんだけど、
数ある候補の内から番号を選択して入力しようと思うとCtrl+Alt+n(nは番号)なんだけど、
GEditの公式ページにはAlt+nで良いって書いてある。
https://help.gnome.org/users/gedit/3.4/gedit-plugins-word-completion.html.en

自分としては使う機会が明らかにWordCompletionの方が多いから、逆の方がスゴイ都合いいんだけど、
現在GEditのショートカットキーを変更するのはスゴイ難しいっぽい(昔はプラグインとかあったみたい)。

ググッて出てくる~/.config/gedit/accel の変更もスゴイ難しい・・・。誰か分かる人がいたら教えて。よろしく。
0846login:Penguin
垢版 |
2017/11/02(木) 19:59:46.62ID:88fKOOJi
>>845
スレ違いと分かってて書くし使ってるディストリやバージョンは書かないし…

Fedora25の gedit3.22だとAlt+番号で
候補が出ているときはword選択、出てないときはタブ切り替えになる
0847845
垢版 |
2017/11/02(木) 22:59:36.25ID:hOMy/o9B
>>846
すみません。まず、スレ違いの点ですが、
ソフトウェア板にLinuxユーザ(GEditはほとんどがLinuxユーザでしょう)がどれだけいるか甚だ疑問ですし(WindowsユーザでGEdit使ってる人はほとんど詳しくないでしょうし、
Linux使いよりも多分詳しくないと思われます)、そういう理由でこちらに質問させてもらいました。

環境によっても違うんですね・・。それは知りませんでした、すみません。
自分はUbuntu16.04LTS、GEditのバージョンは3.18です。

>>846様のFedora25、GEdit3.22の場合はスゴイ良い動き方をしますね。スゴイ羨ましいです!その様な動作の仕方が理想ですね。。マジで大変うらやましいです。

ご回答ありがとうございました。
0848845
垢版 |
2017/11/03(金) 00:02:30.59ID:RlVX2BAD
UbuntuSoftwareにあったGEditを3.22だったので、インストールしてみたら
日本語対応まだしてなかったみたいです。

プラグイン選択とかファイル選択ダイアログは全部文字化けです・・。
0849login:Penguin
垢版 |
2017/11/03(金) 02:45:39.77ID:PPg57U6Z
Web ブラウザとかの「名前を付けて保存する」みたいな機能を使用した時に出る,
ファイルの名称と保存先を決定できるポップアップダイアログって,どこが出しているか分かりますか?
GTK+ のテーマを継承していたり「最近開いた項目」があったりするので GVfs あたりかなと予想しているのですが。

そしてあのダイアログを自分の好きなプログラムに置き換えることは可能でしょうか。
0850845
垢版 |
2017/11/03(金) 06:44:11.70ID:l5oC3qKd
Ubuntu特有のHUDやらAltでウィンドウメニューをアクティブにする動作のショートカットキーがどうも影響してるみたいです。ショートカットキーを変更してみましたが、時々反映されるまで時間とタイミングがかかるので、もうちょっと待ってみます。ありがとう。
0852login:Penguin
垢版 |
2017/11/18(土) 15:11:28.29ID:ayWF6KV7
http://mao.5ch.net/test/read.cgi/linux/1188968326/820-825
のプログラムをPython3のGTK+3で書いてみた
注)半角空白をすべて全角空白にしてあるのでコピペする場合は全角空白を半角空白にしてください

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import GLib
from gi.repository import GObject
import cairo
import threading
import time

class Window01(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.set_title('Cairo Test')
        self.set_position(Gtk.WindowPosition.CENTER)
        self.set_property("width-request", 600)
        self.set_property("height-request", 630)

        self.count = 0
        self.load_image()
        self.vbox = Gtk.Box()
        self.vbox.set_orientation(Gtk.Orientation.VERTICAL)
        self.add(self.vbox)

        self.darea = Gtk.DrawingArea()
        self.darea.set_property("width-request", 600)
        self.darea.set_property("height-request", 600)
        self.vbox.pack_start(self.darea, False, False, 0)
0853login:Penguin
垢版 |
2017/11/18(土) 15:12:15.71ID:ayWF6KV7
        self.button01 = Gtk.Button()
        self.button01.set_label('Button01')
        self.vbox.pack_start(self.button01, False, False, 0)
        self.button01.connect('clicked', self.button01_clicked)

        self.darea.connect('draw', self.on_draw_event)
        self.connect('delete-event', Gtk.main_quit)

    def on_draw_event(self, drawingarea, cr):
        self.do_drawing(drawingarea, cr)

    def do_drawing(self, drawingarea, cr):
        screen_width = Gdk.Screen.get_width(Gdk.Screen.get_default())
        screen_height = Gdk.Screen.get_height(Gdk.Screen.get_default())
        image_width = self.image.get_width()
        image_height = self.image.get_height()
        x_scaling = 1.0;
        y_scaling = 1.0;
        cr.scale(x_scaling, y_scaling);
        cr.set_source_surface (self.image, 0, 0);
        cr.paint ();

    def load_image(self):
        self.image = cairo.ImageSurface(cairo.FORMAT_ARGB32, 600, 600)
        ic = cairo.Context(self.image)

        #色の指定(外枠:Red,Green,Blue)
        ic.set_source_rgb(0.0, 0.0, 1.0)
        #長方形(x,y,width,height)を描画
        ic.rectangle(0.0, 0.0, self.image.get_width(), self.image.get_height())
        #長方形の外枠を作る
        ic.stroke_preserve()
0854login:Penguin
垢版 |
2017/11/18(土) 15:12:48.56ID:ayWF6KV7
        #色を指定(塗りつぶし:Red,Green,Blue)
        ic.set_source_rgb(0.0, 0.0, 1.0)
        #長方形を塗りつぶす
        ic.fill()
        ic.stroke()

    def button01_clicked(self, button01):
        self.thread = threading.Thread(target=self.thread_func)
        self.thread.start()

    def thread_func(self):
        ic = cairo.Context(self.image)
        for i in range(0, self.image.get_height()):
            Gdk.threads_enter()
            ic.set_source_rgb((i % 256) / 256.0, 0.0, (i % 256) / 256.0)
            ic.rectangle(0.0, i, self.image.get_width(), 1.0)
            ic.stroke()
            Gdk.threads_leave()

            Gdk.threads_enter()
            self.darea.queue_draw()
            Gdk.threads_leave()
            time.sleep(0.001)

GObject.threads_init()
Gdk.threads_init() 
Gdk.threads_enter()
window = Window01()
window.show_all()
Gtk.main()
Gdk.threads_leave()
0855login:Penguin
垢版 |
2017/11/18(土) 15:40:31.44ID:b18MsuCQ
>>852
2chにコードを貼ると権利が2ch側に譲渡されるのでpastebinなどを使いましょう。
0856login:Penguin
垢版 |
2017/11/19(日) 03:25:08.61ID:s1HDk3bJ
一般的なペーストビン使ったらいいと思う
0858login:Penguin
垢版 |
2017/12/25(月) 03:03:03.86ID:gvoWVmMo
初歩的な質問ですみません。
glade3.18、C言語(初級の本を読んだ程度の知識です)を使用しています。

起動したgladeの右側のプロパティ画面で、

window1 GtkWindow
□|__scrolledwindow1 GtkScrolledWindow
□□|__viewport1 GtkViewport
□□|____image2 GtkImage

のように配置し、scrolledwindow1の全般タブのminimum content width と minimum content height に整数値を入れる事で、window1はマウスでの画像拡大縮小(ドラッグで)が出来る事は確認出来ました。

次に、

window1 GtkWindow
□|__box1 GtkBox
□□|__scrolledwindow1 GtkScrolledWindow
□□□|__viewport1 GtkViewport
□□□|____image2 GtkImage
□□□|button1 GtkButton

と変更すると、画像部分のスクロールは可能なものの、button1を含めたwindowの拡大縮小(ドラッグ)が上手くいきません。

ファイルダイアログの様に、OKボタンやキャンセルボタンをドラッグする事で、ボタンも一緒に下に動く様にするには、どうしたらいいのか悩んでいます。
box1の設定で見逃している部分があると思い調べているのですが見つかりませんでした。
どうすれば解決するのか教えてください。
0859login:Penguin
垢版 |
2017/12/25(月) 03:19:48.60ID:gvoWVmMo
858です。ソースは以下のものです。

#include <gtk/gtk.h>
#include <stdlib.h>
static void cb_button_clicked ( GtkWidget *Button1 , gpointer user_data )
{
gtk_main_quit ();
}

int main(int argc, char *argv[])
{
GtkBuilder *builder;
GObject *window1;
// GtkWidget *Button1;

gtk_init(&argc,&argv);
builder = gtk_builder_new();
GError* error = NULL;
if ( !gtk_builder_add_from_file(builder, "test17.ui", &error) ) {
g_warning("Couldn't load builder file: %s", error->message);
g_error_free(error);
exit(1);
}
gtk_builder_add_from_file(builder, "test17.ui", NULL);
gtk_builder_connect_signals(builder, NULL);
window1 = gtk_builder_get_object(builder, "window1");
gtk_widget_show_all(GTK_WIDGET(window1));
gtk_main();
return 0;
}
0860login:Penguin
垢版 |
2017/12/25(月) 06:27:37.33ID:gvoWVmMo
858です。

window1 GtkBox
|__box1 GtkBox
|____textview1 GtkTextView
|____viewport1 GtkViewport
|______button1 GtkButton

textview1のパッキングタブで、展張をONで試したら上手くいきました。
画像ファイルが失敗した理由は分かりませんでしたが、他のwidgetでは成功しました。
0861login:Penguin
垢版 |
2017/12/25(月) 06:29:41.36ID:gvoWVmMo
×…window1 GtkBox
○…window1 GtkWindow
0862login:Penguin
垢版 |
2017/12/28(木) 23:15:58.83ID:3uyy4+Dz
Gtkmmってあんなに良いのに、なんで全然流行ってないの・・?VisualC++はおろか、Qtなんかよりよっぽど良いじゃん。

もっとはやってクレヨン!!他のC++GUIライブラリがあるか知らんが、VC#、VC++、Qtより俺は断然遥かに好きだな。

簡易言語は面白くないので、無しで。VB6くらいやっててワクワクするぜ!
0863login:Penguin
垢版 |
2017/12/29(金) 13:15:34.46ID:S/CsVkMC
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。

グーグル検索⇒『宮本のゴウリエセレレ』

L23RPOWZ2H
0866login:Penguin
垢版 |
2018/01/02(火) 12:28:18.29ID:ejbpDk09
>>864
一つ目の方なら頑張れば使えそうな気がするけど2つ目は無理ゲー
ミュートできないじゃん
0867login:Penguin
垢版 |
2018/01/02(火) 16:36:35.82ID:BIlvYLfT
普通にスタイル変えたスライダーに見える
0868login:Penguin
垢版 |
2018/01/15(月) 17:16:03.76ID:fkabkrJp
>>793-794 2015年書き込み 0
>>795 2016年書き込み 1
2017年 68
何故か2017年はGTK+大躍進の年だった!!!!
0869login:Penguin
垢版 |
2018/01/28(日) 23:35:06.91ID:iGCLkti0
あの、すごく素人な質問なんだけど、
GTK+3ってGNOMEが主に採用してるツールキットだよね。
ということは、ウィンドウの装飾がGNOMEデスクトップのそれになるってことかな。
上下に幅が広いウィンドウタイトルは嫌なんだけど、どうなんだろう。あの高さって調整できるんだろうか。
0871login:Penguin
垢版 |
2018/02/04(日) 14:47:47.61ID:QeG1ckHC
TextViewのテスト用に作ってみました
ソースコードはpastebinに貼り付けてみました

エラトステネスのふるい Python版
https://pastebin.com/7T8BThMJ

エラトステネスのふるい C言語版
https://pastebin.com/egnHWyCJ



>>857にTextViewを追加してみました

マンデルブロート集合 Python版
https://pastebin.com/gnfUsgtJ

マンデルブロート集合 C言語版
https://pastebin.com/EDZcmy53
0872login:Penguin
垢版 |
2018/02/06(火) 19:44:30.02ID:LsU5FPdR
>>871はGTK+3でPythonはPython3です

PyGObjectを各プラットフォームにインストールするには下のURLを参照してください
http://pygobject.readthedocs.io/en/latest/getting_started.html

C言語版の方はUbuntuやDebianなら下のようにすればGTK+3が入ります
sudo apt-get install libgtk-3-dev

コンパイルは下のようにやります
gcc test01.c -o test01 $(pkg-config --cflags --libs gtk+-3.0)
(ここでtest01.cはC言語のソースファイル名 test01は実行ファイル名なので任意の名前に変更してください)
0873login:Penguin
垢版 |
2018/02/12(月) 22:22:17.34ID:+qmPP7OK
FontForge っていうアプリケーションって GTK テーマには対応してないんですか?
黒系のテーマにしてるんですけど,FontForge には反映されてないっぽいんですが…
0874login:Penguin
垢版 |
2018/02/27(火) 22:26:33.46ID:KMCxop2+
>>871-873
皆さん、お疲れ様です。

Gtkも面白くて最初けっこうやったけど、なんしろ参考書籍が少なすぎる・・。
特にGtkmmに至っては0・・・。ネットのドキュメントや英語サイトを貪っても情報量は少ない・・・
Gtk面白いから、書籍が出ればもっと人気でるんだろうけどなあ・・・

Qtでさえ、分厚いオライリーの本2冊と小さい本とQtQuickの本がある。
まぁQtQuick以外はQt4対応だけど、Ubuntu入れてれば、apt-get で QtCreator込のQt4環境が
余裕で手に入るからなあ・・・ もちろんQt5環境も簡単に手に入るけど・・・

GtkもPythonバインディングやRustバインディングもあるんだし、だれかなんとかして書籍だしてくれないかな・・
0875login:Penguin
垢版 |
2018/02/27(火) 22:42:01.38ID:SXflemsb
PC初心者時代は書籍をありがたがったけど数年でその時期は去ったな
マニュアル類を読めば大抵のことは書かれてるから基本的に書籍いらんしな
0876login:Penguin
垢版 |
2018/02/27(火) 22:44:20.35ID:vsNBSr66
まあこう言った理由で新しい人は入って来ず、結果流行らない訳ですw
0877login:Penguin
垢版 |
2018/02/28(水) 03:42:44.26ID:c4j2ATnA
新しい人はチュートリアルやっておけば取っ掛かりは十分だよね
0878login:Penguin
垢版 |
2018/02/28(水) 21:05:10.44ID:M8ckEWeS
>>874
書籍にまとめるにはある程度の範囲に渡って網羅し、記述に矛盾が無いことが求められる
作成コストが高い

それよりも、ユーザが気になっている部分を1つずつ調べて、分かった所があればブログ等にまとめればよい
無矛盾性が要求される範囲が小さくなるので作成コストを低く出来る
広まってほしいと思うのなら、使っている人間が一人一人動かないとどうしようもない
0879login:Penguin
垢版 |
2018/03/02(金) 18:43:51.79ID:VWhGnlbA
みんなばらばらのLinuxの世界
0880login:Penguin
垢版 |
2018/03/08(木) 11:46:28.58ID:ZZm3j3TZ
た、多様性は正義だから…(震え声)
でもgtkmmの文書の少なさはちょっと異常な気がする。使われてる規模に比べてね。
0881login:Penguin
垢版 |
2018/03/22(木) 22:15:22.48ID:okeyq8e9
Mousepadって[Alt]キーを押しながら開くメニューの上で項目を選択して、
[Ctrl]+[<anykey>]とやるとその項目にそのショートカットが割り当てられるんだな。
これGtk+3の機能なのかな。他のXfce4使ってるんだけど、アプリケーションではならんかった。
0882login:Penguin
垢版 |
2018/05/22(火) 07:49:24.99ID:Czl6p0FW
僕の知り合いの知り合いができた副業情報ドットコム
関心がある人だけ見てください。
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

JG11H
0883login:Penguin
垢版 |
2018/06/07(木) 14:43:39.32ID:63GNIF9F
すみません。GtkからMySQLやSQLiteに接続したいと思ってるんですが、

普通にLinuxプログラムでMySQLなどに接続する方法もあるけど、GNOMEDBっていうのもあるらしく
GtkやGtkmmから接続しようとすると、どうもGNOME側はGNOMEDBを使えみたいな感じがするんですが
参考URLも外国語含めて少ないので、困っています。

普通のLinuxプログラムでデータベースに接続するような感じでGtkから使ってみてもいいですよね?
0884login:Penguin
垢版 |
2018/06/15(金) 15:09:38.02ID:uRfp5dHV
Gtk+を勉強してると外国語も含めて情報ページが少ないんですよ。

でね、やってるうちにGtkmmもPyGtkも覚えちゃうんですよw

さすがに、LispやRustのGtkバインドとかまでは手を出さないけど、出してみてもいいっか。
0885login:Penguin
垢版 |
2018/07/18(水) 04:16:12.46ID:IgF5ypZG
ファイルに関連付けられているアイコンを取得する方法ってないですか?
FileChooserDialogでファイルのところにアイコン表示されているものでいいです。
アイコン取得の機能さえ公開されていれば簡単にできそうな気はするのですが、見つけられませんでした。。。
0886login:Penguin
垢版 |
2018/11/08(木) 13:15:12.33ID:0k996jQ5
>>885
ファイルマネージャにもよるんじゃね?
0887ino
垢版 |
2019/04/21(日) 11:23:51.84ID:ESbqs5Hs
Gtk.ComboBoxText() の下に Gtk.Entry() が幾つか横に並んでいる GUI を作ろうとしていて苦戦してます。
と言うのは、上のコンボの選択に応じて、エントリーの数など、下の内容を変えたいのです。
アドバイスをもらえると助かります。キーワード、これを調べろ等でもありがたいです。
また、例などご存知ないでしょうか? 私は python3 + GTK+3 ですが、それに限らないです。
0888login:Penguin
垢版 |
2019/04/22(月) 00:01:33.32ID:M+dAYxMq
ウィジェットAの操作でウィジェットBを変更する事はGTK+で可能でしょうか?
0889login:Penguin
垢版 |
2019/09/24(火) 21:04:36.04ID:aSWZYMiy
「Clion」ってIDEで、GTK+を扱えるらしいけど
これって画面デザインとかできるの?  2万でできるわけねえなあ...
0890login:Penguin
垢版 |
2019/11/28(木) 12:13:56.02ID:kw29DPG6
UbuntuでWebViewを使ったPGを作ろうとしていますがうまくいきません。
monodevelopにlibwebkit2-sharp-4.0-cilを参照設定し、htmlの表示はできたのですが、C#とJavaScript間でのデータの受け渡しができません。
サンプルになるようなソース、ウェブサイトを教えてもらえないでしょうか。
0892login:Penguin
垢版 |
2020/04/07(火) 08:43:24.27ID:zxHfMuME
>>26
志村さん亡くなっちゃったね…
0893login:Penguin
垢版 |
2020/04/18(土) 15:11:09.13ID:dHG+LUD7
GTK+に音鳴らすインターフェイスないの?
0894login:Penguin
垢版 |
2020/05/17(日) 12:10:17.07ID:ztTG+X4j
インプットメソッドの挙動の質問なんですが、

GTK+でテキストフィールドに選択された文字列がある状態から日本語入力を開始すると、
未確定文字が選択文字列の前に挿入されますが ( |選択文字列| -> |あ}選択文字列| 等)、
他のプラットフォームだと、日本語の入力開始時点で選択文字列は削除されるようです。
(|選択文字列| -> |あ|)

で、前者のGTK+の挙動を後者のようにしたいのですが、それって何かの設定で
いけたりしますかね? それともGTK+のテキストフィールド等のクラス (GtkEntryとか)の
コードをいじったりしないと無理ですかね?
0895login:Penguin
垢版 |
2020/11/04(水) 15:58:47.24ID:mhM0YxaG
Gtkmm使っています…。メインウィンドウからもう一つウィンドウを開きます…
このウィンドウにはテキストビューがあるとします…。巨大テキストを貼り付けて…メモリ使用量を増やします…。
そして…ウィンドウを閉じます…。window->signal_delete_event().connectで設定したメソッドで…delete windowをします…。
仕様では…メモリが解放され…メモリ使用量が減るはずなのですが…減りません…。
調べていたら…もっと深刻な事に気づきました…。G_OBJECT(なんかのWidget->gobj())->ref_countで参照カウントを見れます…
Glib::RefPtrはよく使います…がヘッダーで宣言せずに…ローカルで何回も宣言して受けたりします…
builder->get_widgetで親Widgetから取ったりしますが…ref_countが加算され…スタックを抜けても残ってます…。
Glib::RefPtrはヘッダーで宣言して…1つしか使わないようには変えれます…。
普通のWidgetの場合は…builder->get_widgetで何回も取得したりしますが…これもref_countが加算されます…
参照の値渡しでガンガン渡したりもしますが…普通のWidgetでもref_count増大は問題なんでしょうか?スタックを抜けてもあります…。
ref_countは後で悩むにしても…巨大テキストのTextViewをdeleteしてもメモリ使用量が減りません…。
非常に困惑しています…。誰か…。
0896login:Penguin
垢版 |
2020/11/04(水) 19:19:14.18ID:mhM0YxaG
895です…。メモリ管理はこれでOKなんだと思う…巨大テキストをdeleteしてもメモリは減らないが…
再度…ウィンドウを立ち上げて…巨大テキストを貼っても…メモリは…増えない…
もちろん…ウィンドウを同時に2個立ち上げてで巨大テキストだと増えます…。
Glib::RefPtrのローカル宣言だけど…問題ない気がする…Windowをdeleteすると…消えてるようだ…。
どうも…今日は…メモリ管理で悩みましたが…このままでOKそうです…。
アプリをバイナリエディタとかでクラックできるのは…こういう仕様だからかもしれません…。
どうしても…メモリを減らしたい場合は…どうすればいいのかねぇ…解りません…。
0897login:Penguin
垢版 |
2020/11/04(水) 19:40:10.27ID:mhM0YxaG
895です…geditでも減らないようです…これはなんとかならないんですか!?
明日は…アロケートあたりを調べてみます…。
0898login:Penguin
垢版 |
2020/11/04(水) 19:51:18.94ID:mhM0YxaG
895です…別プロセスでWindow起動な気がしてきました…。
とにかく調べていきます…。
0899login:Penguin
垢版 |
2020/11/05(木) 19:14:11.92ID:4YZKWaEw
895です…テキストビューを300MBまで上げて閉じると…100MBくらい減りました…。
Linuxのアロケータの問題だと思います…。
0900login:Penguin
垢版 |
2020/11/06(金) 00:23:41.75ID:JXwz9Ncv
どういう調査をしてるか分からんけど、mallocってのはユーザーランドのライブラリで、freeしたからといって直ぐにkernelに返却する訳じゃないぞ
メモリリークを調査したいならValgrindとか専用のツールを使わないと
メモリ周りの調査は簡単には行かないよ
0901login:Penguin
垢版 |
2020/11/08(日) 08:09:49.82ID:O49Zrc/N
>>899
>Linuxのアロケータの問題だと思います

アロケータとはどんなものかをちゃんと理解してるのかと。
汎用アロケータのせいにできる範囲というものがある。

geditとか、そんなバカでかいファイルを開くことを想定してなくて、チマチマメモリを
割り当てるようになってたりするのでは。

ただ確かにLinux以外はどうかはちょっと興味がある。mallocの使い方は同じでもさくさく
mmap/munmapしたりするのもしれない。それはそれで別の問題もありうるが。
0902login:Penguin
垢版 |
2020/11/17(火) 07:44:42.90ID:xVdi3jrK
煮詰まっています…ダイアログに関してです…。Gladeです。
まず…トップレベルに指定すると…Gnomeにウィンドウが2個開いたマークが付きます。
これが気に入らない…メッセージ用のダイアログですが…こんなものにウィンドウ2個開いたみたいな感じに
なるのは許せない…設定ダイアログでもそうです…メインウィンドウのみ起動していると見せたい…。
ウィンドウの属性の型をポップアップにしました…Gnomeでのインスタンス表示マークは…
メインウィンドウのみになっています…美しい…しかし…今度はリサイズができなくなりました…
これでは設定画面とかでは使えません…困りました。ID設定の横の複合というチェックボックスを付けました…
うまく行きました…が…今度は…template classになってしまい…Gtk::Builderで読み込めなくなりました…。
その他…Resize grip…駄目でした。ウィンドウが2個開いたように見えるケースで…
ページャーのスキップ、タスクバーのスキップなどやりましたが…駄目…2個開いたマークです…。
Gnomeでメインウィンドウのみにマークがついて…1個の状態で…サイズ変更ができるケースは…
なんとかしてありませんか?非常に…困っています…。
レスを投稿する

レス数が900を超えています。1000を超えると表示できなくなるよ。

ニューススポーツなんでも実況