标签: gtk#

使用 C#、.NET Core 3 和 GTK# 进行跨平台编程(和替代方案)

我即将开始开发一个软件项目,如果可能的话,该项目应该在 Linux 和 Windows 上运行。由于我已经有一些 C# 经验,所以我渴望将它用于这个项目。我认为对于 .NET Core 3 和 GTK# 3.22 这应该不是问题,因为 .NET Core 应用程序应该是开箱即用的跨平台。GTK# - 根据我的理解 - 应该可以在任何地方使用相同版本的 GTK+。

为什么是 C#?嗯,我只是喜欢这种语言,而且我想使用一个适用于 c# 的 ECS 框架。

到目前为止,我已经在 Visual Studio 中设置了一个针对 .NET Core 3 的测试控制台应用程序项目,并添加了GTK# 特定的 NuGet 包

我写了一个简单的Hello World程序来测试环境。

using System;
using Gtk;

namespace GTKTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Application.Init();
            Window win = new Window("Hello GTK");
            Label lbl = new Label("This is a test GTK App written with C# for GNU/Linux …
Run Code Online (Sandbox Code Playgroud)

c# mono cross-platform gtk# .net-core

6
推荐指数
1
解决办法
8346
查看次数

在Gtk中,TreePath和TreeIter之间有什么区别?

我一直在学习使用TreeViews,这两种类型通常用于访问树的特定行.我真的不明白两者之间的区别.我的代码正在工作 - 我根据函数的必需参数在两者之间来回转换 - 但不是基于对原因的真正理解.

这两种类型有什么区别?

c# gtk gtk# gtktreeview

5
推荐指数
1
解决办法
1750
查看次数

Gtk.ListStore中的VirtualMode?

我正在寻找Gtk.ListStore中的一个功能,它像Winforms中的ListView.VirtualMode一样工作.

有类似的东西吗?

.net c# listview gtk# virtualmode

5
推荐指数
1
解决办法
394
查看次数

什么更简单更干净?GTK还是QT?

可能的重复:
我应该选择什么:GTK+ 还是 Qt?

什么更容易理解、更自然、更快掌握、每天用不同的语言愉快地使用 - 最新版本的 GTK 或 QT?

这个问题可能有点主观和神圣战争,但我相信很有趣、很重要并且可以客观地回答。

gtk qt pygtk gtk# pyqt4

5
推荐指数
0
解决办法
723
查看次数

您如何使用自己的控件创建自定义 GTK# 小部件?

我正在尝试通过继承 Gtk.Bin 来创建自定义 GTK 小部件。我没有使用 Stetic GUI 构建器。这个小部件将包含几个标准的 Gtk 小部件(VBox、标签、按钮等)。

public class MyWidget : Gtk.Bin
{
    public MyWidget : base ()
    {
        build ();
    }
    private void build ()
    {
        VBox vbox1 = new Vbox (true, 0);
        vbox1.PackStart (new Label ("MyWidget"), true, true, 0);
        this.Add (vbox1);
    }
}
Run Code Online (Sandbox Code Playgroud)

同时,当我将自定义小部件添加到主窗口时,我什么也没看到。显示其他控件的窗口,为此自定义小部件分配了空间。我希望在其空间中看到“MyWidget”标签,但什么也没有显示。我单步调试调试器中的代码,所有代码都被调用,但在运行时没有显示。

任何帮助,将不胜感激。

c# mono gtk#

5
推荐指数
1
解决办法
3422
查看次数

改变 Gtk.Image 的单个像素

我正在尝试在 Gtk.Image 小部件上设置单个像素。文档指出 Gtk.Image 的 ImageProp 属性返回一个 Gdk.Image 似乎可以让您编辑单个像素,但是每当我使用它时它只返回空值。

到目前为止,我的解决方案是从磁盘加载图像作为 System.Drawing.Bitmap,对其进行编辑,将其保存到一个临时文件,然后将其加载回 Gtk.Image,但这显然并不理想。

为了

Gtk.Image image = new Gtk.Image("images/test.png");
Gdk.Image gdkImage = image.ImageProp;
Run Code Online (Sandbox Code Playgroud)

为什么 gdkImage 总是为空?

图像本身加载并正确显示。

c# gtk gtk#

5
推荐指数
1
解决办法
2554
查看次数

如何检查Gtk.CheckButton是否已被选中?

我正在使用GTK,我已经CheckButton在窗口中插入了(GTK版本的复选框).现在我需要得到它是否被检查.我怎么做?

c# gtk gtk#

5
推荐指数
1
解决办法
4512
查看次数

如何使用GTK#在TreeView单元内渲染小部件

我正在使用Mono和Gtk#开发应用程序。在我的应用程序内部,我需要使用TreeView控件。我正在寻找一种在单元格内呈现小部件而不是绘制所有内容的方法。我有想要在这些单元格中使用的自定义小部件,并且我不想手动绘制它们。

我查看了文档和论坛,但没有找到一种方法。我认为这是不可能的,因为CellRendererCombo和CellRendererToggle似乎渲染了一个Widget。

谢谢

c# mono gtk#

5
推荐指数
0
解决办法
363
查看次数

如何在Linux上捆绑Mono/GTK#应用程序?

这是我遇到的问题:我使用MonoDevelop编写了一个Gtk#程序,它运行得很好.但现在我希望能够在其他Linux机器上运行它,而无需安装MonoDevelop.

我的解决方案有两个项目:主要的Gtk#应用程序,以及它所依赖的C#库项目.因此,当我构建主项目时,它会生成MainProject.exe和MainProject.exe.mdb,以及bin/Release文件夹中的DependencyProject.dll.

我尝试运行以下命令将它全部打包成一个可执行文件(从bin/Release文件夹运行):

mkbundle MainProject.exe -o mainproject --deps *.dll
Run Code Online (Sandbox Code Playgroud)

但是,我从运行该命令得到此错误:

未处理的异常:

System.IO.FileNotFoundException:无法加载文件或程序集"gtk-sharp"或其依赖项之一.该系统找不到指定的文件.

文件名称:'gtk-sharp'

在System.AppDomain.Load(System.String assemblyString,System.Security.Policy.Evidence assemblySecurity,Boolean refonly)[0x00000] in:0

at(wrapper remoting-invoke-with-check)System.AppDomain:Load(string,System.Security.Policy.Evidence,bool)

在System.Reflection.Assembly.ReflectionOnlyLoad(System.String assemblyString)[0x00000] in:0

在IKVM.Reflection.Universe.DefaultResolver(System.String refname,Boolean throwOnError)[0x00000] in:0

在IKVM.Reflection.Universe.Load(System.String refname,IKVM.Reflection.Module requesModule,Boolean throwOnError)[0x00000] in:0

在IKVM.Reflection.Universe.Load(System.String refname)[0x00000] in:0

在MakeBundle.QueueAssembly(System.Collections.Generic.List`1文件,System.String代码库)[0x00000]中:0

[错误]致命的未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集'gtk-sharp'或其依赖项之一.该系统找不到指定的文件.

文件名称:'gtk-sharp'

在System.AppDomain.Load(System.String assemblyString,System.Security.Policy.Evidence assemblySecurity,Boolean refonly)[0x00000] in:0

at(wrapper remoting-invoke-with-check)System.AppDomain:Load(string,System.Security.Policy.Evidence,bool)

在System.Reflection.Assembly.ReflectionOnlyLoad(System.String assemblyString)[0x00000] in:0

在IKVM.Reflection.Universe.DefaultResolver(System.String refname,Boolean throwOnError)[0x00000] in:0

在IKVM.Reflection.Universe.Load(System.String refname,IKVM.Reflection.Module requesModule,Boolean throwOnError)[0x00000] in:0

在IKVM.Reflection.Universe.Load(System.String refname)[0x00000] in:0

在MakeBundle.QueueAssembly(System.Collections.Generic.List`1文件,System.String代码库)[0x00000]中:0

我看到了其他一些类似问题的Stack Overflow问题,但没有一个提供任何实用的解决方案.如何mkbundle有效地使用此命令?

linux gtk mono gtk# mkbundle

5
推荐指数
1
解决办法
798
查看次数

GTKSharp 中的自定义信号

上下文

我正在将 C/GTK+ GUI 应用程序转换为 C#。我在 VS2017 中使用 GTKSharp 绑定版本 3.22.0。

该应用程序声明了几个信号,例如

g_signal_new ("SIG_NAME", params...);
Run Code Online (Sandbox Code Playgroud)

并通过 发出它们g_signal_emit_by_name(... "SIG_NAME"...)

问题

我找不到一种方法将该行为转换为 GTK#。

我研究了 GTK# 的源代码,了解如何定义和处理自定义信号,就像这里一样,但我无法模仿那里实现的行为。

该方法

  1. 方法#1

我尝试过像这样定义自定义对象:

using System;
using Gtk;

public class MyApp
{
    public class MyCustomObj : GLib.Object
    {
        public delegate void MyDelegateSignalHandler(int arg0, int arg1);
        public delegate void MyDelegate(int arg0, int arg1);
        public class MyDelegateArgs : GLib.SignalArgs
        {
            public int a { get; set; }
        }
        public MyCustomObj() : base()
        {}
        [GLib.Signal("MyEvent")]
        public …
Run Code Online (Sandbox Code Playgroud)

c# signals gtk# glib gtk3

5
推荐指数
0
解决办法
753
查看次数

标签 统计

gtk# ×10

c# ×8

gtk ×5

mono ×4

.net ×1

.net-core ×1

cross-platform ×1

glib ×1

gtk3 ×1

gtktreeview ×1

linux ×1

listview ×1

mkbundle ×1

pygtk ×1

pyqt4 ×1

qt ×1

signals ×1

virtualmode ×1