标签: pygtk

PyGTK或PyQT是制作GTK原生Python应用程序的首选吗?

我是一名网络开发人员,希望能够在Python中为Ubuntu编写一个小桌面应用程序.我在网上搜索PyGTK与PyQT的优点和缺点,并没有真正找到任何好的比较.

你们有什么感想?它们是否都在GNOME系统上生成外观小部件?一个比另一个更容易使用吗?任何意见都会很好.

对不起主观问题.

python ubuntu pygtk pyqt

9
推荐指数
2
解决办法
3088
查看次数

PyGTK:动态标签包装

这是一个已知的错误/问题,当父级更改时,GTK中的标签不会动态调整大小.这是一个非常烦人的小细节之一,如果可能的话,我想破解它.

我按照16软件的方法进行了操作,但根据免责声明,您无法将其调整得更小.所以我尝试了其中一个注释(set_size_request信号回调中的调用)中提到的技巧,但这导致了某种无限循环(尝试并看到).

有没有人有任何其他想法?

(您不能仅在调用期间阻止信号,因为正如print语句似乎表明的那样,问题在函数离开后开始.)

代码如下.你可以看到我的意思,如果你运行它并尝试调整窗口大小然后更小.(如果要查看原始问题,请在"连接到大小分配信号"之后注释掉该行,运行它,然后将窗口调整得更大.)

Glade文件("example.glade"):

<?xml version="1.0"?>
<glade-interface>
  <!-- interface-requires gtk+ 2.16 -->
  <!-- interface-naming-policy project-wide -->
  <widget class="GtkWindow" id="window1">
    <property name="visible">True</property>
    <signal name="destroy" handler="on_destroy"/>
    <child>
      <widget class="GtkLabel" id="label1">
        <property name="visible">True</property>
        <property name="label" translatable="yes">In publishing and graphic design, lorem ipsum[p][1][2] is the name given to commonly used placeholder text (filler text) to demonstrate the graphic elements of a document or visual presentation, such as font, typography, and layout. The lorem ipsum …
Run Code Online (Sandbox Code Playgroud)

pygtk

9
推荐指数
1
解决办法
3800
查看次数

如何用PyGTK/Gtkbuilder重复显示一个Dialog?

我创建了一个PyGTK应用程序,当用户按下按钮时会显示一个Dialog.该对话框在我的__init__方法中加载:

builder = gtk.Builder()
builder.add_from_file("filename")
builder.connect_signals(self) 
self.myDialog = builder.get_object("dialog_name")
Run Code Online (Sandbox Code Playgroud)

在事件处理程序中,对话框随命令一起显示self.myDialog.run(),但这只能运行一次,因为在run()对话框被自动销毁之后.如果我再次单击该按钮,应用程序将崩溃.

我读到有一种方法可以使用show()而不是run()对话框没有被销毁的地方,但我觉得这对我来说不是正确的方法因为我希望对话框能够以模态方式运行并且仅在用户之后将控制权返回给代码关闭了它.

有没有一种简单的run()方法可以使用gtkbuilder 使用该方法重复显示对话框?我尝试使用gtkbuilder重新加载整个对话框,但这似乎没有用,对话框缺少所有子元素(我更喜欢在程序开始时只使用构建器一次).


[解决方案](编辑)
正如下面的答案所指出的那样,使用hide()诀窍.我首先想到你仍然需要捕捉"删除事件",但这实际上没有必要.一个有效的简单示例是:


import pygtk
import gtk

class DialogTest:

    def rundialog(self, widget, data=None):
        self.dia.show_all()
        result = self.dia.run() 
        self.dia.hide()


    def destroy(self, widget, data=None):
        gtk.main_quit()

    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.connect("destroy", self.destroy)

        self.dia = gtk.Dialog('TEST DIALOG', self.window, 
           gtk.DIALOG_MODAL  | gtk.DIALOG_DESTROY_WITH_PARENT)
        self.dia.vbox.pack_start(gtk.Label('This is just a Test'))


        self.button = gtk.Button("Run Dialog")    
        self.button.connect("clicked", self.rundialog, None)
        self.window.add(self.button)
        self.button.show()
        self.window.show() …
Run Code Online (Sandbox Code Playgroud)

python gtk pygtk dialog gtkbuilder

9
推荐指数
1
解决办法
7089
查看次数

在HPaned问题中调整gtk TreeView的大小

我在hpaned的左侧有一个树视图,但是当我尝试向左移动栏以使树视图小于其自动大小而不是调整树视图大小时,它将整个程序窗口向右扩展.有想法该怎么解决这个吗?

来源的相关部分如下:

对于hpaned.

    self.vpan = gtk.VPaned()
    self.hpan = gtk.HPaned()
    self.vpan.show()
    self.hpan.show()

    self.vBox1.pack_end(self.hpan, True, True, 0)
    self.hpan.pack2(self.vpan,True, True)
Run Code Online (Sandbox Code Playgroud)

而对于树视图.

    self.ftree = gtk.TreeStore(str,str,str)
    self.treefill(None, os.path.abspath(os.path.dirname(__file__)))

    self.tree = gtk.TreeView(self.ftree)
    self.tvcolumn = gtk.TreeViewColumn('Project')
    self.tree.append_column(self.tvcolumn)
    self.cellpb = gtk.CellRendererPixbuf()
    self.celltxt = gtk.CellRendererText()

    self.tvcolumn.pack_start(self.cellpb,False)
    self.tvcolumn.pack_start(self.celltxt,True)

    self.tvcolumn.set_attributes(self.cellpb, stock_id=0)
    self.tvcolumn.set_attributes(self.celltxt, text=1)
    self.tvcolumn.set_resizable(True)

    self.hpan.pack1(self.tree,True,True)
    self.tree.show()
Run Code Online (Sandbox Code Playgroud)

python gtk pygtk

9
推荐指数
1
解决办法
1136
查看次数

ImportError:没有名为gi.repository Mac OS X的模块

我 在Mac OS X上安装virt-manager0.10.0

首先我用自制软件安装了python,libvirt,gtk + 3,pygtk和其他依赖项

但是当我运行virt-manager时,我遇到了这个错误

from gi.repository import GObject
ImportError: No module named gi.repository
Run Code Online (Sandbox Code Playgroud)

当我在python命令行中运行此导入时,我得到相同的错误.但是当我尝试时没有错误 import gtk

我认为问题是自制的pygtk版本不使用gtk + 3并使用gtk2,因为我们可以在这里看到gi.repository Windows 只有gtk + 3使用该语法.

python gtk homebrew pygtk

9
推荐指数
1
解决办法
2万
查看次数

在Gtk +中绘制图像的最快方法是什么?

我有一个图像/ pixbuf,我想绘制到gtk.DrawingArea并经常刷新,所以blitting操作必须快.这样做很简单:

def __init__(self):
  self.drawing_area = gtk.DrawingArea()
  self.image = gtk.gdk.pixbuf_new_from_file("image.png")

def area_expose_cb(self, area, event):
  self.drawing_area.window.draw_pixbuf(self.gc, self.image, 0, 0, x, y)
Run Code Online (Sandbox Code Playgroud)

然而,导致性能非常慢,可能是由于pixbuf不是显示器颜色格式.

我也没有在开罗取得成功,因为它似乎仅限于24/32位格式,并且没有16位格式(FORMAT_RGB16_565不受支持和弃用).

在Gtk +中快速绘制图片有哪些替代方案?

python gtk pygtk cairo

8
推荐指数
1
解决办法
3446
查看次数

PHP桌面应用程序

我有很多年开发PHP Web应用程序的经验,最近也开始深入研究Python.最近我一直对进入桌面应用程序感兴趣,但在该领域绝对没有经验.我看过很少关于PHP-gtk的文章,并想知道它是否真的是一个很好的领域.
我真正想要的是能够快速开发一些体面的中小型应用程序,并能够在Linux和Windows中部署它们.Python或PHP中的东西会很棒(但如果它有很大的优点,我会很高兴学到别的东西).

你们推荐什么?

谢谢

php python gtk desktop pygtk

8
推荐指数
1
解决办法
1562
查看次数

TreeViewColumn标头中的PyGTK Entry小部件

如何gtk.Entrygtk.TreeViewColumn标题/标题中使小部件可聚焦或可编辑?我试过这个:

# Create tree-view.
treeview = gtk.TreeView()

#...

# Create column.
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn(None, renderer, text=0)

# Set column header.
header = gtk.VBox()

title = gtk.Label("Column")
header.pack_start(title)

filter = gtk.Entry()
#...
header.pack_start(filter)

header.show_all()
column.set_widget(header)

# Add column
treeview.append_column(column)
Run Code Online (Sandbox Code Playgroud)

但是列标题中的Entry小部件不可编辑且不会聚焦.我已经尝试将'clickable'设置为TrueFalse.我在Ubuntu 10.04上使用pygtk 2.21.0-0ubuntu1和libgtk 2.22.0-0ubuntu1.任何帮助将不胜感激.

编辑:

问题源于GtkTreeViewColumn标头的显示方式.标题小部件放在GtkAlignment其父级是GtkHBox其父级是GtkButton其父级最终的父级GtkTreeView.该GtkButton是拦截和阻止我GtkEntry被聚焦和接收鼠标输入.

python gtk pygtk gtktreeview gtkentry

8
推荐指数
1
解决办法
2265
查看次数

将其他小部件放在gtk.Menu中

我希望能够在我的gtk.Menu中放置一个gtk.ProgressBar,但由于菜单只需要gtk.MenuItems及其子类,我所做的就是采用一个普通的gtk.MenuItem并尝试添加我的进度条作为一个孩子.由于gtk.MenuItem是gtk.Bin的子类,因此它应该能够容纳任何小部件.

例:

menu = gtk.Menu()

item = gtk.MenuItem()

button = gtk.ProgressBar()
button.pulse()
button.show()

item.add(button)
item.show()

menu.append(item)
Run Code Online (Sandbox Code Playgroud)

没有pygtk抱怨,这运行得很好.但是,我的进度条根本没有显示:

gtk.Menu的屏幕截图

如果我用gtk.Label替换进度条,它就显示得很好.

现在问我的问题:

  1. 我如何知道它将采用哪些小部件?
  2. 我怎么欺骗它让我把其他小部件放在那里?

python pygtk appindicator

8
推荐指数
2
解决办法
3668
查看次数

以编程方式关闭gtk窗口

如果您在GTK中有一个子窗口并且想要以编程方式关闭它(例如,按下保存按钮或转义键),是否有一种关闭窗口的首选方法?

例如,

window.destroy()
# versus
window.emit('delete-event')
Run Code Online (Sandbox Code Playgroud)

gtk pygtk

8
推荐指数
2
解决办法
1万
查看次数

标签 统计

pygtk ×10

python ×8

gtk ×7

appindicator ×1

cairo ×1

desktop ×1

dialog ×1

gtkbuilder ×1

gtkentry ×1

gtktreeview ×1

homebrew ×1

php ×1

pyqt ×1

ubuntu ×1