Ubuntu Quickly PyGTK 和 Glade3

1 投票
1 回答
593 浏览
提问于 2025-04-17 11:56

我已经使用Ubuntu好几年了,一直在寻找一个适合开发的环境,想做一些我心里想的事情。找到一个让我觉得舒服的集成环境真是让人沮丧。最近我发现了Ubuntu Quickly,觉得它看起来不错,特别是对于像我这样有Windows MS Access和VBA背景的人。所以我试了一下,使用DesktopCouch在几天内做出了我的第一个应用。

不过我发现DesktopCouch现在不太受欢迎,但我不想为了我的小应用去用SQL,于是决定使用KirbyBase,到目前为止一切顺利。

我已经在转换上走了很远(见截图),但是我就是搞不懂对话框的屏幕。图中的对话框在我运行应用时会显示,但它不应该在用户点击添加或编辑按钮之前就显示。

我已经尝试了三天,想要在按钮被点击时显示、展示或者让对话框可见的语法,但就是搞不定。

我试着把它设置成一个单独的Ui文件,就像关于和偏好设置那样,但这让我更加困惑。

我觉得答案可能很明显,但经过三天我还是需要帮助。目前主窗口的代码也附上了,我想在OnAddSlang这个程序里显示对话框,收集数据等等。

顺便说一下,我也是Python的新手。

提前谢谢你的帮助。

Michael![ScreenDump

]1.

enter code here

# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
### BEGIN LICENSE
# This file is in the public domain
### END LICENSE

import sys
import os

import gettext
from gettext import gettext as _
gettext.textdomain('ozslang')

import gtk
import logging
logger = logging.getLogger('ozslang')

from kirbybase import KirbyBase, KBError    #Set up KirbyBase Database



from ozslang_lib import Window
from ozslang.AboutOzslangDialog import AboutOzslangDialog
from ozslang.PreferencesOzslangDialog import PreferencesOzslangDialog
from ozslang.EntryOzslangDialog import EntryOzslangDialog

FILE_EXT = "tbl"

# See ozslang_lib.Window.py for more details about how this class works
class OzslangWindow(Window):
    __gtype_name__ = "OzslangWindow"

    def finish_initializing(self, builder): # pylint: disable=E1002
        """Set up the main window"""
        super(OzslangWindow, self).finish_initializing(builder)

        self.AboutDialog = AboutOzslangDialog
        self.PreferencesDialog = PreferencesOzslangDialog


        # Code for other initialization actions should be added here.
        # Set up KirbyBase Database - Check if Created if not Create it
        # Otherwise Check Read it and Print out Results.

        db = KirbyBase()
        dbTable = "slang.tbl"

        # Table has Record No, Slang, Meaning, Useage, Is Common, Locality and Comment.
        # Fields are Integer, String, String, String, Boolean, String and String.

        # Check if the table exists.

        if os.path.exists('slang.tbl'):
            boolIsCreated = True
            print boolIsCreated

            #recno = db.insert(dbTable, ['Pie Hole', 'Mouth', 'Shut your pie hole', True, 'Australia Wide', 'No Comments 2'])
            result = db.select('slang.tbl', ['recno'], ['*'])
            print result
            barMsg = 'Slang Table is in current directory'
            self.statusbar = builder.get_object("statusbar1")
            self.statusbar_cid = self.statusbar.get_context_id("Status")
            self.statusbar.push(self.statusbar_cid, barMsg)
        else:
            #If it does not exist in this location, create it.

            result = db.create('slang.tbl', ['slang:str', 'meaning:str', 'use:str',
            'iscommon:bool', 'locality:str', 'comment:str'])
            print 'Slang Table Created'
            barMsg = 'Slang Table Created'
            self.statusbar = builder.get_object("statusbar1")
            self.statusbar_cid = self.statusbar.get_context_id("Status")
            self.statusbar.push(self.statusbar_cid, barMsg)
            print 'at end of slang table open create'

    def on_EditSlang(self, widget):
        """Called when the user wants to edit a wine entry"""
        print "In Edit Function"
        pass_

    def OnAddSlang(self, widget):
        print 'In Add Function'
        #Called when the use wants to add a slang
        EntryOzslangDialog.hasfocus = True

        print 'after dialog...'

    def on_btnOK_clicked(self,widget):
        pass

    def on_btnCancel_clicked(self,widget):
        pass

    def _on_close(self, window):
        pass

1 个回答

1

最后,事情变得简单了,只要知道了秘密。我只需要知道对话框需要通过构建器来引用,像这样:

entrydialog = self.builder.get_object("EntryDialog")
entrydialog.hide()

当然,当用户点击添加按钮时,会使用show()选项再次显示窗口,以便输入数据。

我知道我遇到的是一个基本的语法问题,但我花了超过三天的时间,时不时地在其他项目之间搜索,才找到与Ubuntu Quickly、Glade 3.10和PyGtk+相关的答案。没有一个视频或示例提到对话框屏幕,虽然有成千上万的例子展示如何使用早期版本的Glade来构建用户界面,但这似乎违背了使用Glade和Quickly的初衷。

我必须说,Glade3和Glade2以及相关的Gtk材料之间的差异真是惊人,Glade3的资源不多,虽然有的还不错,但就是不够深入展示新功能。

无论如何,感谢这个空间让我发泄一下,当我完成应用程序时,我会考虑写个示例分享给大家。

大家加油 - 继续保持好工作

迈克尔 Yackandandah

撰写回答