2017-02-20 7 views
0

Glade 인터페이스 디자이너를 사용하여 만든 Python3/PyGObject에서 대화 상자 창을 실행하는 데 문제가 있습니다. 여기Glade를 사용하여 생성 된 Python3/PyGObject에서 대화 상자를 올바르게 실행하는 방법

Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.

: 신호는 I이 스크립트를 실행하려고 할 때이 오류가 있기 때문에 제대로 연결되지 않은 : 내 과도 부모 창을 설정할 수 또한

AttributeError: Handler button_click_dialog not found

을, 나도 몰라 여기 내 Python3/PyGObject 파일입니다 http://pastebin.com/yKz3P58s

그리고 :

#!/usr/bin/env python3 

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

# Initialize Gtk builder and import UI 
builder = Gtk.Builder() 
builder.add_from_file("windowtest.glade") 

# Get objects from builder 
window = builder.get_object("ButtonWindow") 
dialog = builder.get_object("ButtonDialog") 

class ButtonWindow: 

    def on_delete_window(self, *args): 
    Gtk.main_quit(*args) 

    def button_click_window(self, widget): 
    print("button_click_window") 
    response = dialog.run() 
    if response == Gtk.ResponseType.OK: 
     print("OK") 
    elif response == Gtk.ResponseType.CANCEL: 
     print("CANCEL") 
    dialog.destroy() 


class ButtonDialog: 

    def __init__(self): 
    print("dialog init") 

    def button_click_dialog(self, widget): 
    print("button_click_dialog") 


# Connect signals 
builder.connect_signals(ButtonWindow()) 
builder.connect_signals(ButtonDialog()) 

# Show main window 
window.show_all() 

# Enter main loop 
Gtk.main() 
내 빈터 파일입니다

누군가 내 대화를 호출/실행/파괴하는 방법을 이해할 수 있습니까? 신호를 어떻게 연결해야합니까?

builder.connect_signals(ButtonWindow()) 
builder.connect_signals(ButtonDialog()) 

그래서 당신이 ButtonWindow 클래스로 button_click_dialog 기능을 이동할 수 있습니다 또는 별도의에서 대화를 저장합니다

답변

0

AttributeError: Handler button_click_dialog not found

문제는 여기에 같은 빌더 객체에 두 개의 클래스를 연결하는 것입니다 파일. 버튼을

def button_click_window(self, widget): 
    print("button_click_window") 
    dialog.set_transient_for(window) 
    response = dialog.run() 
    if response == Gtk.ResponseType.OK: 
     print("OK") 
    elif response == Gtk.ResponseType.CANCEL: 
     print("CANCEL") 
    dialog.destroy() 

그것은 또한 당신이 대화를 호출 할 수 할 경우에 dialog.hide()dialog.destroy() 전환하기 적합 할 수 있습니다를 클릭하면


Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.

당신은 예를 들어 set_transient_for를 호출 할 수 있습니다 몇 번이고 단 한번도 아닙니다.

+0

답변 해 주셔서 감사합니다. elya5. 나는이 두 파일을 자신의 파일로 분리하는 데 매우 흥미가있을 것이다. 문제는, 당신이 설명 할 때 그것을 시도했지만 올바르게하지 못했습니다. 이 문제를 해결하도록 도와 주시겠습니까? windowwindow.py : http://pastebin.com/MW8dRLys windowdialog.py : http://pastebin.com/1nCAUSjc windowtest.glade : 변경되지 않았습니다. – mursuhaukka

+0

창과 대화 상자를 두 개의 별개의 glade 파일에 넣으십시오. – elya5

+0

Ok. 대화 상자가 별도의 파일에 추가되었으므로 대화 상자를 가져 와서 인스턴스화하고 실행하려면 어떻게해야합니까? 이전과 같은 .py 파일이 있습니다. – mursuhaukka