python 3.x - wx.Choice vises ikke direkte på Windows 10

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder på et projekt ved hjælp af Python 3.6.4 og wxpython 4.0.1 msw (phoenix). Jeg udvikler på Mac, men et af de systemer, jeg bruger til at implementere, er Windows 10. Min kode (fjernet af alt irrelevant ) ser sådan ud:


import wx

class MainWindow(wx.Frame):
    def \_\_init\_\_(self):
        wx.Frame.\_\_init\_\_(self, None, title="Dropdown Test", size=(400,400))
        control\_sizer = wx.GridBagSizer(vgap=3, hgap=10)
        label1 = wx.StaticText(self, -1, label="First Dropdown:", size=(120,35))
        control\_sizer.Add(label1, (0,0), (1,1), wx.EXPAND)
        label2 = wx.StaticText(self, -1, label="Second Dropdown:", size=(120,35))
        control\_sizer.Add(label2, (1,0), (1,1), wx.EXPAND)
        self.choice1 = wx.Choice(self, -1, choices=["thing 1","thing 2","thing 3","thing 4"])
        self.choice2 = wx.Choice(self, -1, choices=["stuff 1","stuff 2","stuff 3","stuff 4"])
        control\_sizer.Add(self.choice1, (0,1), (1,1), wx.EXPAND)
        control\_sizer.Add(self.choice2, (1,1), (1,1), wx.EXPAND)
        self.SetSizerAndFit(control\_sizer)

if \_\_name\_\_ == "\_\_main\_\_":
    app = wx.App()
    main\_window = MainWindow()
    main\_window.Show()
    app.MainLoop()


På Mac'en ser alt ud, som jeg forventer. I Windows fungerer dropdowns (wx.Choice controls) korrekt - jeg kan vælge elementer - men de viser ikke det aktuelt valgte emne, når de foldes op igen. Her er hvad de ligner i sammenligning:


Sammenligne skærmbilleder af kode kører på Mac v Windows [6]


Jeg forstår ikke hvad jeg har gjort forkert.

Bedste reference


Efter meget mere eksperimentering ser det ud til, at brugen af ​​eksplicit dimensionering på wx.Choice i stedet for at stole på standardindstillinger løser problemet med ikke at se det aktuelle valg, men det viser stadig ingen tekst i boksen wx.Choice indtil brugeren har valgt noget.


Det andet problem er fastsat ved at udtrykkeligt tildele en startværdi i stedet for at tælle på standardindstillingerne. Ingen af ​​disse er nødvendige på Mac, men ser ud til at være påkrævet til Windows. Dette er arbejdskoden for \_\_init\_\_:


def \_\_init\_\_(self):
    wx.Frame.\_\_init\_\_(self, None, title="Dropdown Test", size=(400,400))
    control\_sizer = wx.GridBagSizer(vgap=3, hgap=10)
    label1 = wx.StaticText(self, -1, label="First Dropdown:", size=(120,25))
    control\_sizer.Add(label1, (0,0), (1,1), flag=wx.LEFT | wx.TOP | wx.EXPAND, border=10)
    label2 = wx.StaticText(self, -1, label="Second Dropdown:", size=(120,25))
    control\_sizer.Add(label2, (1,0), (1,1), flag=wx.LEFT | wx.TOP | wx.EXPAND, border=10)
    self.choice1 = wx.Choice(self, -1, choices=["thing 1","thing 2","thing 3","thing 4"], size=(120,25))
    self.choice1.SetSelection(0)
    control\_sizer.Add(self.choice1, (0,1), (1,1), flag=wx.RIGHT | wx.EXPAND, border=10)
    self.choice2 = wx.Choice(self, -1, choices=["stuff 1","stuff 2","stuff 3","stuff 4"], size=(120,25))
    control\_sizer.Add(self.choice2, (1,1), (1,1), flag=wx.RIGHT | wx.EXPAND, border=10)
    self.choice2.SetSelection(1)
    self.SetSizerAndFit(control\_sizer)


Jeg har også tilføjet nogle mellemrum omkring kontrollerne for æstetik.