我有一個Kivy應用程序。如何在kivy中使用阻塞MessgeBox
從主GUI中,我想打開一個新的消息框並強制主GUI等待操作框交互的結果。
我看到Qt4消息框支持這種阻塞調用類型,但我還沒有在Kivy中找到等價的功能。這種功能是否存在?
我有一個Kivy應用程序。如何在kivy中使用阻塞MessgeBox
從主GUI中,我想打開一個新的消息框並強制主GUI等待操作框交互的結果。
我看到Qt4消息框支持這種阻塞調用類型,但我還沒有在Kivy中找到等價的功能。這種功能是否存在?
彈出窗口小部件用於創建模式彈出窗口。默認情況下,彈出窗口將覆蓋整個「父窗口」。當你創建一個彈出窗口時,你必須至少設置一個Popup.title和一個Popup.content小部件。
模裝置阻止:)
下面的代碼片段,其沒有工作,雖然它實際上是沒有真正阻擋。 您需要定義一個或兩個替代方案才能繼續使用 程序。這是僞阻塞技巧。
import kivy
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.app import App
class MessageBoxApp(App):
def build(self):
return Button(text='Press for MessageBox!', on_press=self.callpopup)
def callpopup(self, event):
dlg = MessageBox(self, titleheader="Title Header", message="Any Message",
options={"YES": "printyes()", "NO": "printno()", "CANCEL": ""})
print "Messagebox shows as kivy popup and we wait for the user action"
def printyes(self):
# routine for going yes
print "You chose the Yes routine"
def printno(self):
# routine for going no
print "You chose the No routine"
class MessageBox(MessageBoxApp):
def __init__(self, parent, titleheader="Title", message="Message", options={"OK": ""}, size=(400, 400)):
def popup_callback(instance):
"callback for button press"
self.retvalue = instance.text
self.popup.dismiss()
self.parent = parent
self.retvalue = None
self.titleheader = titleheader
self.message = message
self.options = options
self.size = size
box = GridLayout(orientation='vertical', cols=1)
box.add_widget(Label(text=self.message, font_size=16))
b_list = []
buttonbox = BoxLayout(orientation='horizontal')
for b in self.options:
b_list.append(Button(text=b, size_hint=(1,.35), font_size=20))
b_list[-1].bind(on_press=popup_callback)
buttonbox.add_widget(b_list[-1])
box.add_widget(buttonbox)
self.popup = Popup(title=titleheader, content=box, size_hint=(None, None), size=self.size)
self.popup.open()
self.popup.bind(on_dismiss=self.OnClose)
def OnClose(self, event):
self.popup.unbind(on_dismiss=self.OnClose)
self.popup.dismiss()
if self.retvalue != None and self.options[self.retvalue] != "":
command = "self.parent."+self.options[self.retvalue]
exec command
if __name__ == '__main__':
MessageBoxApp().run()
我的意思是:打開彈出後。我希望主要流程捕獲彈出窗口上的用戶操作。例如:popup有3個按鈕:按鈕A,按鈕B和按鈕C.我希望主流等待哪個按鈕單擊彈出。這是在JavaScript中的警報功能相同的過程。請幫幫我。謝謝。 – 2013-04-25 04:03:45
我被要求不使用回調函數來通知從彈出消息箱到主要gui的變化。 – 2013-04-25 04:09:35
http://kivy.org/docs/api-kivy.uix.modalview.html#kivy.uix.modalview.ModalView可能是你想要的...一個模態視圖將被阻止,直到它被告知關閉...或者我不明白你在問什麼.... – 2013-04-25 04:14:47