import wx
import wx.grid as gridlib
from random import randint
OPTIONS = [1, 2, 3, 4, 5, 6, 7, 8, 9, "DEL", 0, "SEND"]
# these are the events' IDs sent to a function when you click a button.
# the OPTIONS_ID is in the same order of OPTIONS.
OPTIONS_ID = [-31990,-31989,-31988,-31987,-31986,-31985, -31984, -31983, -31982, -31981, -31980, -31979] # the built in wxpython IDs for the buttons
GAME_POSITION = (400, 100)
GAME_SIZE = [900, 600]
class Frame(wx.Frame): # class for all the frames in our game.
def __init__(self, parent, id, title, pos, size):
wx.Frame.__init__(self, parent, id, title, pos, size)
self.panel = wx.Panel(self)
self.fdf = wx.TextCtrl(self.panel, size=(275, 75), pos=(520, 20))
self.count = 0
# this function creates a textbox at a specific position with a specific size.
def write(self, panel, txt, pos, size=20, font_family=wx.SWISS, font_style = wx.NORMAL,font_weight = wx.BOLD, underline = False):
# create a textbox at a specific position with a specific size.
your_txt = wx.StaticText(panel, -1, txt, pos)
your_txt.SetFont(wx.Font(size,font_family,font_style,font_weight,underline))
# same as above, just for a button.
def create_button(self, panel, txt, position, width, height):
Size = wx.Size(width, height)
self.button = wx.Button(panel, -1, txt, position, Size)
self.border = wx.BoxSizer(wx.VERTICAL)
self.border.Add(self.button)
self.Bind(wx.EVT_BUTTON, lambda evt: self.OnButton(evt), self.button)
def disable_button(self, panel, txt, position, width, height):
Size = wx.Size(width, height)
self.button = wx.Button(panel, -1, txt, position, Size)
self.border = wx.BoxSizer(wx.VERTICAL)
self.border.Add(self.button)
self.Bind(wx.EVT_BUTTON, lambda evt: self.OnButton(evt), self.button)
self.button.Disable()
def OnButton(self, event):
print repr(event.Id) + ","
if event.Id in OPTIONS_ID: # if indeed an option button was pressed
exited = -1 # exited is 5100 if the user exited his dialog box
# assigning the events to the button.
for i in range(12):
if event.Id != -31981 and event.Id != -31979 and event.Id == OPTIONS_ID[i]:
self.fdf.AppendText(str(OPTIONS[i]))
self.count += 1
elif event.Id == -31979:
pass
if event.Id == -31981:
if self.count > 0:
self.count -= 1
self.fdf.Remove(self.fdf.GetLastPosition()-1, self.fdf.GetLastPosition())
if self.count == 4:
for child in self.panel.GetChildren():
if isinstance(child, wx.Button):
try:
int(child.GetLabel())
except ValueError:
if child.GetLabel() == "SEND":
child.Enable()
else:
child.Disable()
else:
for child in self.panel.GetChildren():
if child.GetLabel() != "SEND":
child.Enable()
else:
child.Disable()
if self.count == 0:
if child.GetLabel() == "DEL":
child.Disable()
for child in self.panel.GetChildren():
if isinstance(child, wx.Button):
if child.GetLabel() in self.fdf.GetValue():
child.Disable()
class Game(wx.App):
def OnInit(self): # upon game opening
# I would like the options window to be the first window's parent
# so I will first set up our options window:
window = Frame(None, -1, "Good Luck!", GAME_POSITION, GAME_SIZE)
first_panel = window.panel
window.write(first_panel, "BULLS AND COWS!", (20, 20), size=(35))
countX = 500
countY = 100
for option in OPTIONS:
if str(option) == "SEND" or str(option) == "DEL":
window.disable_button(first_panel,str(option), (countX, countY), 100, 100)
else:
window.create_button(first_panel,str(option), (countX, countY), 100, 100)
countX += 110
if str(option) == "3" or str(option) == "6" or str(option) == "9":
countY += 110
countX = 500
window.Show(True)
return True
def main():
camel = Game()
camel.MainLoop()
if __name__ == '__main__':
main()
Was ich versuche, aus irgendeinem Grunde ist das Gitter in dem gesamten Rahmen gezeigt, zu tun ist, ein Gitter in den leeren Bereich hinzufügen, aber die die die anderen Attribute verstecken das Panel. Meine Frage ist, wie man das Gitter normalerweise zum Panel hinzufügt, ich meine, ohne das andere Programm zu ruinieren? Ich habe versucht, mit der Position zu spielen, aber aus irgendeinem Grund funktioniert es nicht, und ich habe keine Informationen im Internet gefunden. Ich werde froh sein, hier etwas Hilfe zu bekommen. Danke (: By the way: das Raster mit 10 Zeilen und 3 Spalten
Es ist nicht sehr klar für mich, was du beschreibst, wie dein Frame aussehen soll, ich sehe kein 10-Zeilen-3-Spalten-Raster Zahleneingabe-Panel und Sie haben getan Import wx.grid als gridlib aber nicht den Import überall verwendet? – Yoriz
Ich möchte, dass mein Rahmen wie der Code oben ist, und ein Gitter zusätzlich auf der linken Seite (der leeren Seite) des Rahmens. Das Problem ist, dass ich nicht weiß, wie man ein Gitter erstellt, das in dieser Position sein wird - als ich versuchte, das Gitter zu bauen, füllte es den ganzen Rahmen und nicht nur die linke Seite. verstehst du? – omer
Ich habe gerade das Gitter importiert, aber habe es noch nicht benutzt (da ich nicht weiß wie). – omer