假设我在内存中读取了一个 svg 文件。操作字符串(更改颜色、渐变等)后,我不想将(现已修改的)svg“文件”包含在使用 PyGTK3 编写的图形用户界面中。最简单的方法是将 svg 再次保存为文件并保存为类似的文件
Gtk.Image.new_from_file(modified_svg)
Run Code Online (Sandbox Code Playgroud)
由于我不想经常这样做,因此有很多不必要的数据从慢速硬盘写入/读取。有没有办法直接从内存中的 svg 字符串创建图像?(我想到了类似于 pixbuf 的东西,但我找不到东西)
我需要打开一个文件来读取内容并将其内容显示在屏幕上。这应该使用 GIO 文件处理来完成。我正在阅读本教程,但作为练习,我需要使用 GIO 来执行以下 c 代码。在c中程序可以是:
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp;
char temp[1000];
if(fp=fopen("locations.txt", "r") != NULL)
{
fgets(temp, 1000, fp);
printf("%s", temp[1000]);
}
fclose(fp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢。
我正在尝试在 gtkmm 中编写一个程序,但按钮不会显示。我已经做了我所知道的一切来让这些按钮显示,但没有任何效果。我什至在 main 和 win_home.cpp 文件中都包含了“显示全部”方法,但仍然没有任何反应。然而,程序确实会执行代码,因为 cout 语句都被打印出来。有谁知道为什么这些按钮不会显示?
主要.cpp:
#include <gtkmm.h>
#include <iostream>
#include "win_home.h"
int main(int argc, char *argv[])
{
auto app = Gtk::Application::create(argc, argv, "com.InIT.InITPortal");
std::cout << "Creating Portal Window" << std::endl;
HomeGUI win_home;
win_home.set_default_size(600,400);
win_home.set_title("St. George InIT Home");
return app->run(win_home);
}
Run Code Online (Sandbox Code Playgroud)
win_home.cpp:
#include "win_home.h"
HomeGUI::HomeGUI()
{
//build interface/gui
this->buildInterface();
//show_all_children();
//register Handlers
//this->registerHandlers();
}
HomeGUI::~HomeGUI()
{
}
void HomeGUI::buildInterface()
{
std::cout << "Building Portal Interface" << std::endl;
m_portal_rowbox = Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 5);
add(m_portal_rowbox);
Gtk::Button m_pia_button = Gtk::Button("Printer …Run Code Online (Sandbox Code Playgroud) 我是 Linux 中 C 语言编程的新手。我喜欢用 GTKlibs 制作 GUI。唯一的问题是我无法 - 而且不仅是 gtk - 无法正确安装这些软件包。我在包含库时遇到问题,就像#include<gtk/gtk.h>我已经使用sudo apt-get install gtklib-3-dev.
在编译时,它每次都会说文件丢失等等。我已阅读将 dpkg 配置和 cflags 放入编译器的选项,但这也不起作用。linux 如何管理包含文件夹以及为什么像 gtk 这样的库有一个上层文件夹,上面有 gtk3 等版本。这就是导致文件丢失的问题。
我正在尝试使用 c 中的 gtk 4 处理按键事件(具体是箭头键)。每当我使用像这里(stackoverflow)和这里(stackoverflow)这样的地方的一些答案时,它们似乎不起作用。
相反,我收到以下错误:
(<unknown>:10924): GLib-GObject-WARNING **: 15:26:27.129: ../gobject/gsignal.c:2613: signal 'key-press-event' is invalid for instance '0x7faa268722f0' of type 'GtkApplicationWindow'
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用“key_pressed”等,但无济于事。
以下项目的总体目标是能够沿着按下/按下箭头键的方向移动一格,但是由于出现了小问题,我还没有做到这一点。
有什么建议吗?
#include <gtk/gtk.h>
static void
draw_function
(GtkDrawingArea *area, cairo_t *cr, int width, int height, gpointer user_data)
{
// int square_size = 80.0;
cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* white */
cairo_paint (cr);
cairo_set_source_rgb(cr, 0.2, 0.3, 0.8);
cairo_rectangle(cr, 10, 10, 90, 90);
cairo_fill(cr);
cairo_save(cr);
cairo_scale(cr, 0.6, 0.6);
cairo_set_source_rgb(cr, 0.8, 0.3, 0.2);
cairo_rectangle(cr, 30, …Run Code Online (Sandbox Code Playgroud) 我有一个包含字符串的字符数组:
char buf[MAXBUFLEN];
buf[0] = 'f';
buf[1] = 'o';
buf[2] = 'o';
buf[3] = '\0';
Run Code Online (Sandbox Code Playgroud)
我希望将此字符串作为参数传递给gtk_text_buffer_insert函数,以便将其插入到GtkTextBuffer.我无法弄清楚的是如何将它转换为a const gchar *,这是gtk_text_buffer_insert第三个参数.
有人可以帮帮我吗?
新的,我知道当你调用gtk.main时程序应该进入无限循环.当调用self.quit时,gtk.main中的循环将中断.
但我需要另一个循环活动,它将检查日志文件的更改,并不断更新更改,进入gtk.Textbuffer,以显示在gtk.Textbox中.那么在哪里可以在以下代码中添加此循环.
class MessageBox:
def __init__(self):
builder = gtk.Builder()
builder.add_from_file("mbx.glade")
self.window = builder.get_object("window")
dic = { "on_buttonSend_clicked" : self.sendmsg,
"on_entry_activate" : self.sendmsg,
"on_buttonWhois_clicked" : self.sendwhois,
"on_buttonIdleTime_clicked" : self.sendidletime,
"on_window_destroy" : self.exitfunc}
builder.connect_signals(dic)
self.entry = builder.get_object("entry")
self.display = builder.get_object("display")
self.displaybuff=self.display.get_buffer()
def exitfunc(self, widget):
def sendmsg(self, widget):
def sendwhois (self, widget):
def sendidletime (self, widget):
if __name__ == "__main__":
msgbox = MessageBox()
msgbox.window.show()
gtk.main()
Run Code Online (Sandbox Code Playgroud) 现在我可以创建一个终端,但输出不用作命令.它只是将字符串打印到虚拟终端.
from gi.repository import Gtk, GObject, Vte
class TheWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="inherited cell renderer")
self.set_default_size(400, 200)
box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
v = Vte.Terminal()
#v.connect ("child-exited", lambda term: gtk.main_quit())
length = len("echo \"string\"\n")
v.feed("echo \"string\"\n", length)
box.pack_start(v, True, True, 0)
self.add(box)
Run Code Online (Sandbox Code Playgroud)
我尝试使用这里的文档 http://developer.gnome.org/vte/0.30/,但是我在解决这些问题时遇到了一些麻烦.我根本找不到关于vte for python gtk3的任何文档.
主要是我只想弄清楚如何在虚拟终端中获取命令提示符,以便它接受来自python gtk3接口内部的命令.
我有这个代码序列:
printf("%p\n", gameGUI);
printf("label %p\n", gameGUI->labelRoundType);
gui_setRoundType(gameGUI->labelRoundType,
gameGUI->game->rounds[roundId]);
printf("label %p\n", gameGUI->labelRoundType);
printf("%p\n", gameGUI);
Run Code Online (Sandbox Code Playgroud)
函数gui_setRoundType的代码.
int gui_setRoundType(GtkWidget *roundTypeLabel, struct Round *round)
{
if (round == NULL)
return ROUND_NULL;
if (roundTypeLabel == NULL)
return POINTER_NULL;
char type[1] = { '\0' };
intToChar(round->roundType, type);
gtk_label_set_text(GTK_LABEL(roundTypeLabel), type);
return NO_ERROR;
}
Run Code Online (Sandbox Code Playgroud)
GameGUI结构的代码:
struct GameGUI {
struct Game *game;
struct Select *select;
struct PlayerCards *playerCards;
struct PlayersGUI *playersGUI;
struct CardsFromTable *cardsFromTable;
struct BidGUI *bidGUI;
GtkWidget *windowTable;
GtkWidget *fixedTable;
GtkWidget *buttonShowScore;
GtkWidget *imageTrump;
GtkWidget *labelRoundType;
GtkWidget *labelNoOfBids; …Run Code Online (Sandbox Code Playgroud) 我用构建了opencv cmake -DWITH_OPENGL=ON ..,但是cmake的输出告诉我支持的OpenGL是NO。
而且我已经检查了cmake缓存以确保WITH_OPENGLis是ON。
使用的GUI是GTK + 3.0,并且已安装libgtkglext1-dev。