Thanks for trying; I should have known it wouldn’t work cross platform. The following should also run on Windows in addition to what you posted; it came from the JPype website but won’t run on a Mac.
import jpype
import jpype.imports
jpype.startJVM()
import java
import javax
from javax.swing import *
def createAndShowGUI():
frame = JFrame("HelloWorldSwing")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setBounds(100, 100, 400, 400)
label = JLabel("Hello World")
frame.getContentPane().add(label)
frame.pack()
frame.setVisible(True)
# Start an event loop thread to handling gui events
@jpype.JImplements(java.lang.Runnable)
class Launch:
@jpype.JOverride
def run(self):
createAndShowGUI()
javax.swing.SwingUtilities.invokeLater(Launch())
As noted above, on Windows it can be run with just the EventDispatchThread:
import jpype
import jpype.imports
jpype.startJVM()
import java
import javax
from javax.swing import *
def createAndShowGUI():
frame = JFrame("HelloWorldSwing")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setBounds(100, 100, 400, 400)
label = JLabel("Hello World")
frame.getContentPane().add(label)
frame.pack()
frame.setVisible(True)
javax.swing.SwingUtilities.invokeLater(createAndShowGUI)
@GoToLoop Will this make it cross-platform? I think Mac would have to use PyObjc plugin for Thonny to get Cocoa framework; not sure.
import jpype
import jpype.imports
jpype.startJVM()
import java
import javax
import platform
from javax.swing import *
if(platform.system() == "Darwin"):
from Cocoa import NSApp
def createAndShowGUI():
frame = JFrame("HelloWorldSwing")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
label = JLabel("Hello World")
frame.getContentPane().add(label)
frame.pack()
frame.setVisible(True)
javax.swing.SwingUtilities.invokeLater(createAndShowGUI)
print(platform.system())
if(platform.system() == "Darwin"):
NSApp.run()