Glade Ubuntu - прозрачная кнопка на фоновом изображении [закрыто]

Я пытаюсь создать приложение для Ubuntu. Мне нужно разместить прозрачные кнопки в определенных местах на фоновом изображении в Glade, чтобы изображение менялось при нажатии кнопки.

Мне пока этого не удалось. Моя кнопка просто не попадает на изображение. Кроме того, мне также не удалось сделать кнопку полностью прозрачной (т.е. она видна при нажатии).

2
задан 4 July 2014 в 22:08

1 ответ

  1. Для фиксированного положения кнопок лучше использовать GtkFixed или GtkLayout (с прокруткой)
  2. Для прозрачности кнопок для меня это - работы, как это должно. Если не попробуйте:
    • Border Relief: None для плоской кнопки
    • Снять флажок Focus on Click для избегают любого выделения фокуса

Пример:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<interface>
  <requires lib="gtk+" version="3.10"/>
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkLayout" id="layout1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkButton" id="button1">
            <property name="label" translatable="yes">button</property>
            <property name="width_request">59</property>
            <property name="height_request">30</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <property name="opacity">0</property>
          </object>
          <packing>
            <property name="x">87</property>
            <property name="y">64</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

В 1-й раз я думал, что Вы имеете в виду Настольный Фон. Так, я просто уезжаю, это может быть полезно для других.

Я не уверен, которым используется версия PyGTK Быстро в (Ubuntu 13.04). Лучше использовать 0,1 непрозрачности для тестирования. Поляна не предоставляет возможность устанавливать keep_below свойство.

PyGTK 3

Добавьте:

    <property name="opacity">0.0</property>
    <property name="decorated">False</property>

Кому:

builder_example.glade

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <!-- interface-requires gtk+ 3.0 -->
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <!-- <property name="keep_below">True</property> -->
    <property name="opacity">0.0</property>
    <property name="decorated">False</property>
    <!-- <property name="position">gtk.WIN_POS_CENTER_ALWAYS</property> -->
    <signal name="delete-event" handler="onDeleteWindow" swapped="no"/>
    <child>
      <object class="GtkButton" id="button1">
        <property name="label" translatable="yes">button</property>
        <property name="use_action_appearance">False</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">True</property>
        <property name="use_action_appearance">False</property>
        <signal name="pressed" handler="onButtonPressed" swapped="no"/>
      </object>
    </child>
  </object>
</interface>

Я прокомментировал их, когда они повысили ошибки (я не уверен, существует ли другой путь в Поляне),

    <!-- <property name="keep_below">True</property> -->
    <!-- <property name="position">gtk.WIN_POS_CENTER_ALWAYS</property> -->

Так, я добавляю их к .py файлу, который будет применен динамично:

window.set_keep_below(True)
window.set_position(Gtk.WindowPosition.CENTER_ALWAYS)

builder_example.py

from gi.repository import Gtk

class Handler:
    def onDeleteWindow(self, *args):
        Gtk.main_quit(*args)

    def onButtonPressed(self, button):
        print("Hello World!")

builder = Gtk.Builder()
builder.add_from_file("builder_example.glade")
builder.connect_signals(Handler())

window = builder.get_object("window1")
window.set_keep_below(True)
window.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
window.show_all()

Gtk.main()

PyGTK 2

Добавьте:

        self.window.set_keep_below(True)
        self.window.set_opacity(0.0)
        self.window.set_decorated(False)
        self.window.set_position(gtk.WIN_POS_CENTER_ALWAYS)

кому: helloworld.py

#!/usr/bin/env python

# example helloworld.py

import pygtk
pygtk.require('2.0')
import gtk

class HelloWorld:

    # This is a callback function. The data arguments are ignored
    # in this example. More on callbacks below.
    def hello(self, widget, data=None):
        print "Hello World"

    def delete_event(self, widget, event, data=None):
        # If you return FALSE in the "delete_event" signal handler,
        # GTK will emit the "destroy" signal. Returning TRUE means
        # you don't want the window to be destroyed.
        # This is useful for popping up 'are you sure you want to quit?'
        # type dialogs.
        print "delete event occurred"

        # Change FALSE to TRUE and the main window will not be destroyed
        # with a "delete_event".
        return False

    def destroy(self, widget, data=None):
        print "destroy signal occurred"
        gtk.main_quit()

    def __init__(self):
        # create a new window
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

        # Add these
        self.window.set_keep_below(True)
        self.window.set_opacity(0.0)
        self.window.set_decorated(False)
        self.window.set_position(gtk.WIN_POS_CENTER_ALWAYS)

        # When the window is given the "delete_event" signal (this is given
        # by the window manager, usually by the "close" option, or on the
        # titlebar), we ask it to call the delete_event () function
        # as defined above. The data passed to the callback
        # function is NULL and is ignored in the callback function.
        self.window.connect("delete_event", self.delete_event)

        # Here we connect the "destroy" event to a signal handler.
        # This event occurs when we call gtk_widget_destroy() on the window,
        # or if we return FALSE in the "delete_event" callback.
        self.window.connect("destroy", self.destroy)

        # Sets the border width of the window.
        self.window.set_border_width(10)

        # Creates a new button with the label "Hello World".
        self.button = gtk.Button("Hello World")

        # When the button receives the "clicked" signal, it will call the
        # function hello() passing it None as its argument.  The hello()
        # function is defined above.
        self.button.connect("clicked", self.hello, None)

        # This will cause the window to be destroyed by calling
        # gtk_widget_destroy(window) when "clicked".  Again, the destroy
        # signal could come from here, or the window manager.
        self.button.connect_object("clicked", gtk.Widget.destroy, self.window)

        # This packs the button into the window (a GTK container).
        self.window.add(self.button)

        # The final step is to display this newly created widget.
        self.button.show()

        # and the window
        self.window.show()

    def main(self):
        # All PyGTK applications must have a gtk.main(). Control ends here
        # and waits for an event to occur (like a key press or mouse event).
        gtk.main()

# If the program is run directly or passed as an argument to the python
# interpreter then create a HelloWorld instance and show it
if __name__ == "__main__":
    hello = HelloWorld()
    hello.main()

Ссылки:

1
ответ дан 7 October 2019 в 17:20

Другие вопросы по тегам:

Похожие вопросы: