2017-07-24 2 views
1

Ich versuche, eine einfache GUI mit WPF in VS2017 zu erstellen. Ich habe versucht, Code nach einer MessageBox zu zeigen, nachdem Button generieren:Message Box in IronPython mit WPF

import wpf 
from System.Windows import MessageBox 
def generate_Btn_Click(self, sender, e): 
    MessageBox.Show("hi") 

und es wird sich zeigen, wenn ich auf die Schaltfläche generieren klicken, aber, wenn ich versuche, eine if-Anweisung hinzufügen, bevor MessageBox.Show():

def generate_Btn_Click(self, sender, e): 
    if A == None: 
     MessageBox.Show("Message1!") 
    else: 
     MessageBox.Show("Message2!") 

Nach dem Klicken auf die Schaltfläche "Generate" wird keine MessageBox angezeigt und das Fenster wird geschlossen. Meine Frage ist, wie man MessageBox in IronPython mit WPF verwendet. Ein einfaches Beispiel, die nicht funktionieren, wenn ich die Taste drücken, ist wie folgt:

import wpf 
from System.Windows import MessageBox 
from System.Windows import Application, Window 

class MyWindow(Window): 
    def __init__(self): 
     wpf.LoadComponent(self, 'IronPython5.xaml') 
    str1 = "" 
    def Button_Click(self, sender, e): 
     if str1 == "": 
      MessageBox.Show("msg1") 
     else: 
      MessageBox.Show("msg2") 

     pass 


if __name__ == '__main__': 
    Application().Run(MyWindow()) 

Dies ist die XAML:

<Window 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="IronPython5" Height="300" Width="300"> 
     <Grid> 
     <Button Content="Button" HorizontalAlignment="Left" Margin="159,238,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/> 
    </Grid> 
</Window> 
+0

'wenn A == None:' das A einen Fehler aus, es sei denn, es etwas in Ihrem Code bezieht? – PRMoureu

+0

@PRMoureu es bezieht sich auf eine Variable und ist gültig. Ich habe extra Codes gelöscht, um es sauber zu machen. Ich benutze A in anderen Teilen des Codes und ist in Ordnung. – 1chenar

+0

ist 'A' eine globale Variable? – denfromufa

Antwort

1

Als ich von cmd lief, hier ist der Fehler, den ich habe:

C:\Program Files (x86)\IronPython 2.7>ipy wpfapp.py 
Traceback (most recent call last): 
    File "wpfapp.py", line 19, in <module> 
    File "wpfapp.py", line 10, in Button_Click 
NameError: global name 'str1' is not defined 

Sie können keine globalen Variablen innerhalb der Klasse definieren!

Und jetzt ist hier eine schnelle Lösung für Sie:

import wpf 
from System.Windows import MessageBox 
from System.Windows import Application, Window 

class MyWindow(Window): 
    def __init__(self): 
     self.str1 = "" 
     wpf.LoadComponent(self, 'app.xaml') 
    def Button_Click(self, sender, e): 
     if self.str1 == "": 
      MessageBox.Show("msg1") 
     else: 
      MessageBox.Show("msg2") 

     pass 


if __name__ == '__main__': 
    Application().Run(MyWindow()) 
+0

vielen Dank. Es funktioniert gut! Bitte lassen Sie mich wissen, wie haben Sie den Code mit ipy.exe gestartet? ist es wirklich notwendig, sowohl XAML und Python-Code in ipy.exe-Verzeichnis zu setzen und dann ausführen? Ich weiß nicht, wie ich die von VS erzeugten IronPython-Projekte mit der Commad-Zeile ausführen soll. – 1chenar