GTK+ 中的六边形按钮

2023-12-02

我正在尝试创建一个按钮GTK+其形状为六边形。 我怎样才能做到不使用CSS?

更一般地说,我如何创建我想要的任何形状的按钮?

是否可以做这样的事情Glade(GTK+ 的用户界面编辑器)?


当我发表评论时,我是在虚张声势,因为我从未做过圆形按钮。我只是用我最初的想法做了一个六边形按钮的示例。我很惊讶它比我想象的要简单!

(顺便说一句,不,在林间空地不可能做到这一点!)

# sorry but the example is in Python! :/

from gi.repository import Gtk


def hexagon(coord_x, coord_y):

    # because of the symetry I take only the absolute value
    coord_x, coord_y= abs(coord_x), abs(coord_y)


    # I got the constants by clicling in the image and printing the coord_x and coord_y values

    if coord_x <= 13 and coord_y <= 25:   # define a rectangle
        return True
    else:
        # I cut the coord x to define a triangle
        coord_x=coord_x-13/2

        # line equation
        ymax=(-25/31)*coord_x+25

        if coord_y < ymax:
            return True
        else:
            return False


class GUI(Gtk.Window):

    def __init__(self):

        self.window_root=Gtk.Window()


        # Create an event box to handle the click's
        self.eventbox=Gtk.EventBox()
        self.eventbox.connect('button-press-event' , self.on_eventbox_pressed)
        self.eventbox.connect('button-release-event' , self.on_eventbox_released)

        # Load the images
        self.hexagon1=Gtk.Image.new_from_file('./3uSFN.png')
        self.hexagon2=Gtk.Image.new_from_file('./cWmUA.png')

        # init the event box
        self.eventbox.add(self.hexagon1)
        self.window_root.add(self.eventbox)     
        self.window_root.show_all()

        # a variable to store the state of the button
        self.state=False



    def on_eventbox_pressed(self, widget , event):

        if 'GDK_BUTTON_PRESS' in str(event.type): # If the user made a "single click"
            if event.button == 1: # if it is a left click

                # get the x,y of the mouse from the center of the image
                pos_x, pos_y=self.window_root.get_position()
                siz_x, siz_y=self.window_root.get_size()
                mouse_x,mouse_y=event.x-siz_x/2, siz_y/2-event.y

                if hexagon(mouse_x, mouse_y):
                    self.eventbox.remove(self.hexagon1)
                    self.eventbox.add(self.hexagon2)
                    self.eventbox.show_all()

                    self.state=True


    def on_eventbox_released(self, widget , event):
        if self.state:
            self.eventbox.remove(self.hexagon2)
            self.eventbox.add(self.hexagon1)
            self.state=False


main=GUI()
Gtk.main()

enter image description here enter image description here

我认为用它来解决你的问题唯一的不方便是不尊重用户的主题。如果这是一个问题,您可以使用 DrawingArea 并按照我的建议获取主题颜色来绘制按钮,而不是使用图像here!

我希望它有用:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GTK+ 中的六边形按钮 的相关文章

  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 如何更改 SwiftUI 列表中分隔符的颜色?

    我在 SwiftUI 中创建了一个列表 我想更改颜色或删除分隔符 因为在 UIKit 中 我们可以轻松更改 TableView 中分隔符的颜色 下面是 SwiftUI 中列表的代码和 UI 图片 State private var user
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 使用 C# 读取 Soap 消息

  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • 在没有背景附件的情况下将背景渐变扩展到整个身体:已修复

    我想要一个背景渐变 例如 background linear gradient to bottom rgba 0 0 0 0 3 rgba 2 126 174 0 9 在我的文档正文上 它延伸到正文的整个高度 并与正文一起滚动 Using
  • Dart 中 JSON 的序列化和反序列化状态

    我在 C 上的序列化方面有很好的经验 在搜索和测试了一些 Dart 库之后 我觉得总体上没有一个真正令人满意的答案 我想知道 Dart 中 JSON 序列化 反序列化的当前状态 未来我们应该期待什么 这最终会得到语言本身的支持吗 目前的最佳
  • 获取 mPDF 中文本的位置以确定 HTML 元素的垂直高度

    我正在使用 mPDF 类生成 PDF 想知道是否以及如何确定生成的 mPDF 文档中最后一行文本的位置 我需要一个 HTML 框来覆盖文本最后一行和文档下边距之间的任何剩余空间 通过将 html 元素设置为高度 100 它将元素推送到新页面
  • 操作已完成 = YES,但没有由其所在的队列启动

    Overview 有一个异步操作子类 将此操作添加到队列中 我在开始之前取消了此操作 运行时错误 警告 SomeOperation went isFinished YES without being started by the queue
  • 如何创建AVPlayer单例类

    我在用着AVPlayer要从网址播放歌曲 我在视图控制器中初始化并分配它 现在我遇到了问题 当我导航到另一个视图控制器并返回主播放器时 播放歌曲详细信息和滑块更新应该保留 但问题是当我导航时再次到主播放器播放详细信息和滑块更新没有发生 但歌
  • TWICImage,如何设置jpeg压缩质量?

    我使用 Delphi XE 和 TWICImage 类进行图像处理 我想知道是否有办法使用 TWICImage 设置 jpeg 压缩质量 procedure TfrmMain Button2Click Sender TObject var
  • 将 jQuery 与 Shadow dom 结合使用

    这里我用 Shadow dom 创建了元素 some preparing code this createShadowRoot creates shadow root this refers to element 稍后在代码中我将访问我创建
  • PHP 使用会话登录

    我是 PHP 的初学者 我尝试创建我的 php 登录代码 但遇到了一些问题 如果我访问其他页面 我的网站不会记住我登录过 会话不会保留
  • 多个读取器更快地读取文件

    所以我有一个大文件 大约有 200 万行 文件读取是我的代码中的瓶颈 欢迎任何建议的方法和专家意见来更快地阅读文件 从该文本文件中读取行的顺序并不重要 所有行都是管道 分隔的固定长度记录 我尝试了什么 我开始并行StreamReader并确
  • Internet Explorer 获取内部 IP 地址

    我正在寻找一种解决方案来获取人们在 IE 中的内部 IP 地址 不使用 java 或 java applet Java 中的等效项如下所示 this sock bind new java net InetSocketAddress 0 0
  • 获取 VBA Excel 2010 中所有字体的列表

    我正在使用 Excel VBA 我想获取组合框中所有字体的列表 任何人都可以帮助我吗 我尝试了这段代码 但在 listcount 中出现错误 Set FontList Application CommandBars Formatting F
  • 为什么这段 Objective-C 代码无法播放 AVPlayerViewController 视频?

    Both are in viewDidLoad What s wrong with this objective c source file The swift version works like a charm Xcode ver 8
  • mpdf 在 Google Chrome 中无法工作,但在 Firefox 中工作正常

    使用 mPDF 创建 PDF 文档时 我再次陷入困境 我已经完成了以下代码 该代码在 Firefox 和 Safari 中运行良好 但在 Google Chrome 中不起作用 require once mpdf60 mpdf php mp
  • 一起使用 Solr 和 Zends Lucene 端口

    下午小伙伴们 在我尝试了 Zend Lucene Search 并发现它在索引大型数据集时并不像人们想象的那样 我转向了 Solr 感谢 Bill Karwin 现在 Solr 为数据库建立索引的速度要快得多 只需 8 分钟多一点即可为包含
  • YouTube 嵌入:如何在 Android 版 Chrome 中启用*非静音*自动播放

    这个问题基本上与this one它有一个针对 HLTML5 视频的解决方案 除了更改chrome flags to set gesture requirement for media playback to disabled对 YouTub
  • chrome.webRequest redirectUrl,URL 保存在 chrome.storage.local 中

    我试图拦截网络请求并将它们重定向到我保存在本地存储上的网址 但它不起作用 我的代码如下 chrome webRequest onBeforeRequest addListener function details if details ur
  • 没有工作数据库连接的 Django 管理命令

    我有许多使用以下配置模型的项目 settings py包括默认配置和配置规范 主要用于开发目的 默认设置 包括数据库设置 可以被外部配置文件覆盖 这些文件通常由管理员为其管理的各种环境定义 为了方便管理员 我写了一个管理命令并单独打包 其中
  • 通过 openFileDialog 打开 Web 文件夹 (Sharepoint 2007)

    我有以下用 C 编写的代码片段 openFileDialog1 InitialDirectory fwm storage users curUser My Documents My Pictures openFileDialog1 Filt
  • 在c中编写函数指针

    最近在看一段代码 发现函数指针的写法是 int fn pointer this args this args 我通常会遇到这样的函数指针 return type fn pointer arguments 类似的事情正在讨论here this
  • GTK+ 中的六边形按钮

    我正在尝试创建一个按钮GTK 其形状为六边形 我怎样才能做到不使用CSS 更一般地说 我如何创建我想要的任何形状的按钮 是否可以做这样的事情Glade GTK 的用户界面编辑器 当我发表评论时 我是在虚张声势 因为我从未做过圆形按钮 我只是