python开发linux桌面应用_Linux桌面程序开发 | Study Python For Gtk3

背景:​ 使用Linux系统已经有一段时间了,在管理系统是几乎都是使用命令行与内核交流的,使用虽多的就是Shell,其次就是python。这两天突然心血来潮,想到了Linux PC端桌面程序,在我个人的熟悉语言中呢,python比较适合,不过、开发Linux桌面我只是玩玩的。对于开发Linux桌面程序掌握Python的推荐使用Python Gtk3。​ 想玩出一个Linux基本桌面程序( ...
摘要由CSDN通过智能技术生成

背景:

​ 使用Linux系统已经有一段时间了,在管理系统是几乎都是使用命令行与内核交流的,使用虽多的就是Shell,其次就是python。这两天突然心血来潮,想到了Linux PC端桌面程序,在我个人的熟悉语言中呢,python比较适合,不过、开发Linux桌面我只是玩玩的。对于开发Linux桌面程序掌握Python的推荐使用Python Gtk3。

​ 想玩出一个Linux基本桌面程序( 几乎没有业务逻辑 ),看完下面的( 重点是图片 | UI组件 ),大概就有一个底了!

1、入门Hello word

源码code

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import gi

gi.require_version('Gtk', '3.0')

from gi.repository import Gtk

# 定义我的hello窗口

class Application(Gtk.Window):

def __init__(self):

Gtk.Window.__init__(self, title="Hello word")

# 实例化

app = Application()

app.show_all()

Gtk.main()

执行execute

Hello word

2-1、布局之boxes布局

源码code

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import gi

gi.require_version('Gtk', '3.0')

from gi.repository import Gtk

class BoxesContainer(Gtk.Window):

def __init__(self):

Gtk.Window.__init__(self, title="BoxesContainer")

# 定义一个盒子

self.box = Gtk.Box(spacing=6)

# 将盒子布局在窗口

self.add(self.box)

# 定义两个按钮并放置于盒子

self.button1 = Gtk.Button(label="Hello")

self.button1.connect("clicked", self.say_hello)

self.box.pack_start(self.button1, True, True, 0)

self.button2 = Gtk.Button(label="Goodbye")

self.button2.connect("clicked", self.say_goodbye)

self.box.pack_start(self.button2, True, True, 0)

@staticmethod

def say_hello(widget):

print("Hello")

@staticmethod

def say_goodbye(widget):

print("Goodbye")

win = BoxesContainer()

win.connect("delete-event", Gtk.main_quit)

win.show_all()

Gtk.main()

执行execute

BoxesContainer

2-2、布局之卡片式布局

源码code

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import gi

gi.require_version('Gtk', '3.0')

from gi.repository import Gtk

class GridContainer(Gtk.Window):

def __init__(self):

Gtk.Window.__init__(self, title="GridContainer")

# 定义一个卡片

grid = Gtk.Grid()

# 将卡片放置于窗口

self.add(grid)

# 定义按钮将布置于卡片上

button1 = Gtk.Button(label="Button 1")

button2 = Gtk.Button(label="Button 2")

button3 = Gtk.Button(label="Button 3")

button4 = Gtk.Button(label="Button 4")

button5 = Gtk.Button(label="Button 5")

button6 = Gtk.Button(label="Button 6")

grid.add(button1)

# 指定具体位置

grid.attach(button2, 1, 0, 2, 1)

# 相对布局

grid.attach_next_to(button3, button1, Gtk.PositionType.BOTTOM, 1, 2)

grid.attach_next_to(button4, button3, Gtk.PositionType.RIGHT, 2, 1)

grid.attach(button5, 1, 2, 1, 1)

grid.attach_next_to(button6, button5, Gtk.PositionType.RIGHT, 1, 1)

win = GridContainer()

win.connect("delete-event", Gtk.main_quit)

win.show_all()

Gtk.main()

执行execute

GridContainer

2-3、布局之list布局

源码code

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import gi

gi.require_version('Gtk', '3.0')

from gi.repository import Gtk

# 继承Gtk.ListBoxRow

class ListBoxRowWithData(Gtk.ListBoxRow):

def __init__(self, data):

super(Gtk.ListBoxRow, self).__init__()

self.data = data

self.add(Gtk.Label(data))

class ListBoxWindow(Gtk.Window):

def __init__(self):

Gtk.Window.__init__(self, title="ListBoxContainer")

# 设置窗口宽度

self.set_border_width(10)

# 定义一个盒子桥梁 | 垂直排列 | 间隔为6

box_outer = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)

self.add(box_outer)

# 定义一个list容器

listbox = Gtk.ListBox()

listbox.set_selection_mode(Gtk.SelectionMode.NONE)

box_outer.pack_start(listbox, True, True, 0)

# 定义一个行箱子

row = Gtk.ListBoxRow()

# 定义一个原子盒子 | 水平装产品

box1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50)

# 定义标签

internal_time_label = Gtk.Label("是否自动对齐网络时间", xalign=0)

# 定义一个开关按钮

switch = Gtk.Switch()

switch.props.valign = Gtk.Align.CENTER

# 装箱

box1.pack_start(internal_time_label, True, True, 0)

box1.pack_start(switch, False, True, 0)

row.add(box1)

listbox.add(row)

# 定义ListBoxRow

row = Gtk.ListBoxRow()

# 定义一个Box | 水平布局

h_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=50)

label = Gtk.Label("日期格式", xalign=0)

combo = Gtk.ComboBoxText()

combo.insert(0, "0", "24-hour")

combo.insert(1, "1", "AM/PM")

h_box.pack_start(label, True, True, 0)

h_box.pack_start(combo, False, True, 0)

row.add(h_box)

listbox.add(row)

# 在定义一个ListBox

listbox_2 = Gtk.ListBox()

items = ["PHP", "Python", "Shell"]

for item in items:

listbox_2.add(ListBoxRowWithData(item))

box_outer.pack_start(listbox_2, True, True, 0)

win = ListBoxWindow()

win.connect("delete-event", Gtk.main_quit)

win.show_all()

Gtk.main()

执行excute

ListBoxContainer

2-4、StackSwitcher

源码code

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import gi

gi.require_version('Gtk', '3.0')

from gi.repository import Gtk

class StackWindow(Gtk.Window):

def __init__(self):

Gtk.Window.__init__(self, title="StackWindow")

self.set_border_width(10)

vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)

self.add(vbox)

# 定义Stack

stack = Gtk.Stack()

stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT)

# 动画时长1s

stack.set_transition_duration(1000)

zone_1 = Gtk.Label("世界上最好的语言 没有之一")

stack.add_titled(zone_1, "说明", "PHP")

zone_2 = Gtk.Label("时日不多 赶紧使用Python")

stack.add_titled(zone_2, "说明", "Python")

stack_switcher = Gtk.StackSwitcher()

stack_switcher.set_stack(stack)

vbox.pack_start(stack_switcher, True, True, 0)

vbox.pack_start(stack, True, True, 0)

win = StackWindow()

win.connect("delete-event", Gtk.main_quit)

win.show_all()

Gtk.main()

执行execute

StackSwitcher

2-5、HeaderBar

源码code

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import gi

from gi.overrides.Gio import Gio

gi.require_version('Gtk', '3.0')

from gi.repository import Gtk

class HeaderBarWindow(Gtk.Window):

def __init__(self):

Gtk.Window.__init__(self, title="HeaderBar")

self.set_border_width(10)

self.set_default_size(400, 300)

# 定义HeaderBar

hb = Gtk.HeaderBar()

# 隐藏原有的工具按钮

hb.set_show_close_button(False)

hb.props.title = "HeaderBar"

self.set_titlebar(hb)

button = Gtk.Button()

icon = Gio.ThemedIcon(name="mail-send-receive-symbolic")

image = Gtk.Image.new_from_gicon(icon, Gtk.IconSize.BUTTON)

button.add(image)

# 放置于HeaderBar左边

hb.pack_end(button)

box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)

Gtk.StyleContext.add_class(box.get_style_context(), "linked")

button = Gtk.Button()

button.add(Gtk.Arrow(Gtk.ArrowType.LEFT, Gtk.ShadowType.NONE))

box.add(button)

button = Gtk.Button()

button.add(Gtk.Arrow(Gtk.ArrowType.RIGHT, Gtk.ShadowType.NONE))

box.add(button)

# 放置于HeaderBar左边

hb.pack_start(box)

self.add(Gtk.TextView())

win = HeaderBarWindow()

win.connect("delete-event", Gtk.main_quit)

win.show_all()

Gtk.main()

执行execute

HeaderBar

2-6、FlowBox

源码code

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import gi

gi.require_version('Gtk', '3.0')

from gi.repository import Gtk

class FlowBoxWindow(Gtk.Window):

def __init__(self):

Gtk.Window.__init__(self, title="FlowBox Demo")

self.set_border_width(10)

self.set_default_size(300, 250)

# HeaderBar

header = Gtk.HeaderBar(title="Flow

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值