Раньше я работал над IronPython (с WPF для разработки некоторых графических интерфейсов), а недавно я начал пробовать pythonnet.
Но я обнаружил, что файл xaml, который работал на IronPython, не работает на CPython + pythonnet.В IronPython я могу определить Button.Click в файле xaml, но в CPython это невозможно.Я пытался найти ответы, но ничего не найдено.Надеюсь, вы могли бы спасти меня здесь ...
Вот мой основной сценарий:
import clr
clr.AddReference(r"wpf\PresentationFramework")
from System.IO import StreamReader
from System.Windows.Markup import XamlReader
from System.Windows import Application, Window
from System.Threading import Thread, ThreadStart, ApartmentState
class MyWindow(Window):
def __init__(self):
stream = StreamReader('test.xaml')
window = XamlReader.Load(stream.BaseStream)
Application().Run(window)
def Button_Click(self, sender, e):
print('Button has clicked')
if __name__ == '__main__':
thread = Thread(ThreadStart(MyWindow))
thread.SetApartmentState(ApartmentState.STA)
thread.Start()
thread.Join()
А вот и test.xmal:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WpfApplication1" Height="300" Width="300">
<Grid>
<Button x:Name="BUTTON" Content="Button" HorizontalAlignment="Left" Margin="101,82,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click" Background="#FFFF1616"/>
</Grid>
</Window>
Ошибкаполученное сообщение:
Необработанное исключение: Python.Runtime.PythonException: XamlParseException: «Не удалось создать« Click »из текста« Button_Click ». 'Номер строки '6' и позиция строки '132'.
Удивительно, если я загружаю один и тот же xaml и сохраняю ту же структуру классов в IronPython, скрипт работает просто отлично:
import wpf
from System.Windows import Application, Window
class MyWindow(Window):
def __init__(self):
self.ui = wpf.LoadComponent(self, 'test.xaml')
def Button_Click(self, sender, e):
print('Button has clicked')
if __name__ == '__main__':
Application().Run(MyWindow())
Большое спасибо за помощь!