glade画的gtk界面python里能直接调用

linux下假如没有安装相应库就自己命令装一下

sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0

来一段代码验证下

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

window = Gtk.Window(title="Test Window")
window.show()
window.connect("destroy", Gtk.main_quit)
Gtk.main()

能弹出窗口说明环境没问题,再来一段代码

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class SimpleGUI:
    def __init__(self):
        # 创建一个窗口
        self.window = Gtk.Window(title="python GTK+ Example")
        self.window.set_default_size(600,300)
        self.window.connect("delete_event", Gtk.main_quit)

        # 创建一个标签
        self.label = Gtk.Label(label="Welcome to PyGtk!")

        # 创建一个按钮
        self.button = Gtk.Button(label="Click Me!")
        self.button.connect("clicked", self.on_button_clicked)
        # 创建退出按钮
        self.btnExit = Gtk.Button(label="退出")
        self.btnExit.connect("clicked", self.on_btnExit_clicked)
        # 创建一个垂直布局
        self.vbox = Gtk.VBox()
        self.vbox.pack_start(self.label, True, True, 0)
        self.vbox.pack_start(self.button, True, True, 0)
        self.vbox.pack_start(self.btnExit, True, True, 0)
        # 设置窗口的内容
        self.window.add(self.vbox)
        self.window.show_all()

    def on_button_clicked(self, widget):
        self.label.set_text("Button Clicked!")
    def on_btnExit_clicked(self, widget):
        self.window.close()    

if __name__ == "__main__":
    gui = SimpleGUI()
    Gtk.main()

说明python和gtk配合很好,下面就用glade画一个界面 test.glade

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkWindow" id="form1">
    <property name="can_focus">False</property>
    <property name="window_position">center-always</property>
    <property name="destroy_with_parent">True</property>
    <property name="icon_name">测试界面</property>
    <signal name="destroy" handler="on_window_destroyed" swapped="no"/>
    <child type="titlebar">
      <placeholder/>
    </child>
    <child>
      <object class="GtkFixed">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkButton" id="btnExit">
            <property name="label" translatable="yes">退出</property>
            <property name="width_request">100</property>
            <property name="height_request">40</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="onexit" swapped="no"/>
          </object>
          <packing>
            <property name="x">425</property>
            <property name="y">350</property>
          </packing>
        </child>
        <child>
          <object class="GtkEntry" id="text1">
            <property name="width_request">100</property>
            <property name="height_request">80</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <signal name="changed" handler="onchange" swapped="no"/>
          </object>
          <packing>
            <property name="x">200</property>
            <property name="y">200</property>
          </packing>
        </child>
        <child>
          <object class="GtkLabel" id="label1">
            <property name="width_request">100</property>
            <property name="height_request">80</property>
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="label" translatable="yes">label</property>
          </object>
          <packing>
            <property name="x">200</property>
            <property name="y">100</property>
          </packing>
        </child>
        <child>
          <object class="GtkButton" id="btnTest">
            <property name="label" translatable="yes">测试</property>
            <property name="width_request">100</property>
            <property name="height_request">40</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="ontest" swapped="no"/>
          </object>
          <packing>
            <property name="x">150</property>
            <property name="y">350</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

然后到python里调用 pygtkmain.py

#!/usr/bin/python3
#-*- coding:utf-8 -*-
# support by qzc1998@qq.com 2023 

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class pygtkmain():
    """This is the pygtkmain application"""
    def __init__(self):
        self.builder = Gtk.Builder()
        self.builder.add_from_file("test.glade")
        self.window = self.builder.get_object("form1")
        self.window.set_default_size(600,480)
        self.window.set_position(1)
        self.window.show()
        self.window.connect("destroy", Gtk.main_quit)
        self.text1 = self.builder.get_object("text1")
        self.label1 = self.builder.get_object("label1")
        self.btnTest = self.builder.get_object("btnTest")
        self.btnTest.connect("clicked", self.ontest)
        self.btnExit = self.builder.get_object("btnExit")
        self.btnExit.connect("clicked", self.onexit)
    def ontest(self, event=None):
        self.label1.set_text(self.text1.get_text())
    def onexit(self, event=None):
        self.window.close()

if __name__ == "__main__":
    winf = pygtkmain()
    Gtk.main()

运行顺利,以后python整带界面的就可以照这个思路整了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值