Tkinter GUI auf anderen Plattformen

Fragen zu Tkinter.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Py-Prog hat geschrieben:Und kann mir mal wer sagen wieso der Scollbar nie Farbig wird?
Sorry hab ich dir vergessen zu sagen, dass unter Windows die Farben welche MS für Scrollbars vorgibt übernommen werden. Die Farben können soviel ich weiss nicht geändert werden. Bei Linux scheinbar kein Problem.

Gruß wuf :wink:
Take it easy Mates!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wolltest du mit dem Screenshot demonstrieren, dass das Umstellen nicht geklappt hat? Der schwarze Hintergrund statt des blauen sieht verkehrt aus, was sich leicht durch die fehlenden Konstanten in ``colors_and_styles`` erklären lässt.
Das Leben ist wie ein Tennisball.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Py-Prog

Hier eine nächste Photo-Shooting Sequenz, Habe das Skript mit 'self.colors_and_styles' ergänzt und auf Win 7 & Kub 10.04 ausprobiert:

Windows 7
Bild


Kunbuntu 10.04
Bild

Gruß wuf :wink:
Take it easy Mates!
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

EyDu hat geschrieben:Wolltest du mit dem Screenshot demonstrieren, dass das Umstellen nicht geklappt hat? Der schwarze Hintergrund statt des blauen sieht verkehrt aus, was sich leicht durch die fehlenden Konstanten in ``colors_and_styles`` erklären lässt.
Es sieht vielleicht verkehrt aus, aber man kann immer noch alle Schriftfarben lesen, wenn ich die Farbe dauerhaft auf Blau umändern möchte muss ich vorher erst schauen welche Farbe man auf Blau noch gut lesen kann und welche nicht, und bei denen dann den Hintergrund anders machen, also macht es überhaupt keinen Sinn da denn Hintergrund als Konstante einzutragen. Ausser dem ist '#RRGGBB' kürzer als self.BACKGROUND_COLORS also braucht es auch weniger Speicher.
wuf hat geschrieben:Hi Py-Prog

Hier eine nächste Photo-Shooting Sequenz, Habe das Skript mit 'self.colors_and_styles' ergänzt und auf Win 7 & Kub 10.04 ausprobiert:

Gruß wuf :wink:
Also wenn ich mir das von Windows 7 anschaue sieht das genau so aus wie bei meinen Freund.

Ich habs jetzt mal geändert, das ich die Reihen in Frames gesetzt habe:
Bild
Und hier der Code:

Code: Alles auswählen

        self.colors_and_styles = {'0': ['Schwarz', '#000000', '#ffffff'],
                                  '1': ['Dunkel Blau', '#0000aa', '#000000'],
                                  '2': ['Dunkel Grün', '#00aa00', '#000000'],
                                  '3': ['Dunkel Türkis', '#00aaaa', '#000000'],
                                  '4': ['Dunkel Rot', '#aa0000', '#000000'],
                                  '5': ['Lila', '#aa00aa', '#000000'],
                                  '6': ['Gold', '#ffaa00', '#000000'],
                                  '7': ['Grau', '#aaaaaa', '#000000'],
                                  '8': ['Dunkel Grau', '#555555', '#000000'],
                                  '9': ['Blau', '#5555ff', '#000000'],
                                  'a': ['hell Grün', '#55ff55', '#000000'],
                                  'b': ['Türkis', '#55ffff', '#000000'],
                                  'c': ['Rot', '#ff5555', '#000000'],
                                  'd': ['Rosa', '#ff55ff', '#000000'],
                                  'e': ['Gelb', '#ffff55', '#000000'],
                                  'f': ['Weiß', '#ffffff', '#000000'],
                                  'k': ['Zufällige Zeichen', None, '?'],
                                  'l': ['Fett schreiben', None, 'F'],
                                  'm': ['Durchgestrichen', None, '-'],
                                  'n': ['Unterstrichen', None, 'U'],
                                  'o': ['schräg schreiben', None, 'K'],
                                  'X': ['X', None, 'X'],
                                  'T': ['T', None, 'T'],
                                  'A': ['A', None, 'A'],
                                  'B': ['B', None, 'B'],
                                  'r': ['Zurücksetzten', '#ffffff', '#000000']}

        self.BACKGROUND_COLOR = '#000000'
        self.TEXT_COLOR = '#00ff00'

        self.window = tkinter.Toplevel(bg=self.BACKGROUND_COLOR)
        self.window.title('Minecraft remote console client  ' + version)
        self.window.protocol("WM_DELETE_WINDOW", exit_func)
        self.window.wm_iconbitmap(os.path.join(icon_path, 'icon.ico'))
        self.window.resizable(0, 0)

        self.entrys_frame = tkinter.Frame(self.window, bg=self.BACKGROUND_COLOR)
        self.entrys_frame.grid(row=0, column=0, sticky='ew')
        tkinter.Label(self.entrys_frame, text='Host:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).grid(row=0, column=0, sticky='ew')
        self.host_entry = tkinter.Entry(self.entrys_frame, width=30, bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.host_entry.grid(row=0, column=1, sticky='ew')
        tkinter.Label(self.entrys_frame, text='Port:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).grid(row=0, column=2, sticky='ew')
        self.port_entry = tkinter.Entry(self.entrys_frame, width=6, bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.port_entry.grid(row=0, column=3, sticky='ew')
        self.port_entry.insert('end', '25575')
        tkinter.Label(self.entrys_frame, text='Passwort:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).grid(row=0, column=4, sticky='ew')
        self.password_entry = tkinter.Entry(self.entrys_frame, width=20, show='*', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.password_entry.grid(row=0, column=5, sticky='ew')
        tkinter.Frame(self.entrys_frame, width=15, height=1, bg=self.BACKGROUND_COLOR).grid(row=0, column=6) #erzeugt 15 pixel abstand zum button
        self.connect_button = tkinter.Button(self.entrys_frame, text='Verbinden', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, activeforeground='#000000',
                                             activebackground=self.TEXT_COLOR, command=self.connect)
        self.connect_button.grid(row=0, column=7, ipadx=10, sticky='ew')
        self.connect_button.bind("<Return>", self.connect)
        

        self.textframe = tkinter.Frame(self.window)
        self.textframe.grid(row=2, column=0, sticky='ew') #row=2 weil viellicht noch ein zwischen raum eingefügt werden soll
        self.scrollbar = tkinter.Scrollbar(self.textframe, bg=self.BACKGROUND_COLOR, troughcolor=self.TEXT_COLOR)
        self.scrollbar.grid(row=0, column=1, sticky='nse')
        self.output_text = tkinter.Text(self.textframe, height=15, state='disable', bg=self.BACKGROUND_COLOR, yscrollcommand=self.scrollbar.set)
        self.output_text.grid(row=0, column=0, sticky='ew')
        self.scrollbar.config(command=self.output_text.yview)

        for tag_name in self.colors_and_styles:
            if not self.colors_and_styles[tag_name][1] is None:
                self.output_text.tag_config(tag_name, foreground=self.colors_and_styles[tag_name][1], background=self.colors_and_styles[tag_name][2])

        self.output('§4[info]§r: -help eigeben um befehlsübersicht anzuzeigen')

##        self.output('§0T§1T§2T§3T§4T§5T§6T§7T§8T§9T§aT§bT§cT§dT§eT§fT')
##        self.output('§4R§6e§eg§ae§bn§3b§1o§5g§4e§cn')


        self.colors_frame = tkinter.Frame(self.window, bg=self.BACKGROUND_COLOR)
        self.colors_frame.grid(row=3, column=0, sticky='ew')
        tkinter.Label(self.colors_frame, text='Farben:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).grid(row=0, column=0)
        self.command_entry = tkinter.Entry(self.window, bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.font_style_Frame = tkinter.Frame(self.colors_frame)
        self.font_style_Frame.grid(row=0, column=1, sticky='e')

        self.font_style_var = tkinter.StringVar()

        column_count = 0
        for tag_name in self.colors_and_styles:
            if tag_name == 'r':
                tkinter.Button(self.font_style_Frame, text='N', width=2, relief='groove',
                               bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR,
                               activeforeground=self.BACKGROUND_COLOR,
                               activebackground=self.TEXT_COLOR,
                               command=functools.partial(self.command_entry.insert, 'insert', '§'+tag_name)).grid(row=0, column=column_count)
            elif not self.colors_and_styles[tag_name][1] is None:
                tkinter.Button(self.font_style_Frame, text=tag_name, foreground=self.colors_and_styles[tag_name][1],
                               background=self.colors_and_styles[tag_name][1],
                               activeforeground=self.colors_and_styles[tag_name][1],
                               activebackground=self.colors_and_styles[tag_name][1],
                               width=2, relief='groove',
                               command=functools.partial(self.command_entry.insert, 'insert', '§'+tag_name)).grid(row=0, column=column_count)
            else:
                tkinter.Button(self.font_style_Frame, text=self.colors_and_styles[tag_name][2],
                               width=2, relief='groove',
                               bg=self.BACKGROUND_COLOR,
                               fg=self.TEXT_COLOR,
                               activeforeground=self.BACKGROUND_COLOR,
                               activebackground=self.TEXT_COLOR,
                               command=functools.partial(self.command_entry.insert, 'insert', '§'+tag_name)).grid(row=0, column=column_count)
            column_count += 1
            
        tkinter.Button(self.colors_frame, text='Verbindung trennen', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, activeforeground=self.BACKGROUND_COLOR,
                                             activebackground=self.TEXT_COLOR, command=self.disconnect).grid(row=0, column=2, sticky='e')
        
        self.command_entry.grid(row=4, column=0, sticky='ew')
        self.command_entry.bind("<Return>", self.sendcommand)
Ich hab da mal ABTX reingesetzt das ich sehe ob sich die Breite dann auch ändert, geht, aber dann passt der Text seine Größe nicht an.
Und jetzt wäre es auch noch schön wenn die Labels, Entrys usw. nicht so zusammen kleben würden.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Py-Prog hat geschrieben:Ausser dem ist '#RRGGBB' kürzer als self.BACKGROUND_COLORS also braucht es auch weniger Speicher.
Sicher, war bestimmt schon beim C64 so, dass das Nachschlagen eines Namens derartig exorbitante Kosten verursachte, dass man gezwungen war ausschließlich magische Konstanten zu verwenden. Gut zu wissen, dass heutzutage angehende Programmierer ökologisch nachhaltig denken, wäre ja nicht auszudenken wenn Code nur wegen besserer Lesbarkeit einen Namen mehr im RAM braucht und 10^-9001 Sekunden langsamer wäre!
BlackJack

@webspider: Wegen Speicherverbrauch und Laufzeit waren die Variablennamen beim BASIC auf dem C64 auch nur maximal zwei Zeichen lang. Das Python nahezu beliebig lange Namen erlaubt, ist mir auch schon unangenehm aufgefallen. :-D
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Py-Prog hat geschrieben:Es sieht vielleicht verkehrt aus, aber man kann immer noch alle Schriftfarben lesen, wenn ich die Farbe dauerhaft auf Blau umändern möchte muss ich vorher erst schauen welche Farbe man auf Blau noch gut lesen kann und welche nicht, und bei denen dann den Hintergrund anders machen, also macht es überhaupt keinen Sinn da denn Hintergrund als Konstante einzutragen. Ausser dem ist '#RRGGBB' kürzer als self.BACKGROUND_COLORS also braucht es auch weniger Speicher.
Und das sollen jetzt ernsthafte Argumente sein, warum du keine Konstanten verwendest? Die sind so schräg, die kannst du doch nicht einmal dich selbst überzeugen? Du behauptest also allen Ersnstes, dass du bei einer Farbänderung lieber alle Farben per Hand anpasst, als mit der einfachsten Lösung wahrscheinlich 99% aller Änderunge abzudecken. Über die Sonderfälle musst du dir eh Gedanken machen, egal ob du per Hand arbeitest oder irgendwo eine Konstante austauscht. Mit einem vernünftigen Ansatz könnte man das manuelle Anpassen sogar ganz einsparen, aber das wäre hier in der Tat etwas überdesignt.

Dass du den Speicherverbrauch aufführst grenzt schon wirklich ans Lächerliche. Ich glaube, dass du gar kein Gefühl oder Verständnis von Speichergrößenordnungen hast. Angenommen, du hast vier GB Arbeitsspeicher, dann kannst du darin über 180 Millionen (ja, eine 18 gefolgt von 7 Nullen) Mal den String "self.BACKGROUND_COLORS" speichern. Bei einer nicht unübliche Festplattengröße von 1 TB passt er über 45 Milliarden Mal hinein.
Das Leben ist wie ein Tennisball.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

EyDu hat geschrieben:Und das sollen jetzt ernsthafte Argumente sein
Nein.

Ich finde es zwar immer noch sinnlos, aber ich habe es geändert.
Und ich hoffe das der GUI jetzt endlich Plattform unabhängig funktioniert, @wuf kannst du das bitte noch einmal testen, und wenns nur auf Kubuntu ist, ich kanns leider (noch) nicht selber machen, weil ich die Virtuellen Maschinen noch nicht zum laufen bringen konnte.

Hier der neue Code:
(Wie gesagt, SOLLTE jetzt eigentlich funktionieren.)

Code: Alles auswählen

        self.BACKGROUND_COLOR = '#000000'
        self.TEXT_COLOR = '#00ff00'

        self.colors_and_styles = {'0': ['Schwarz', '#000000', '#ffffff'],
                                  '1': ['Dunkel Blau', '#0000aa', self.BACKGROUND_COLOR],
                                  '2': ['Dunkel Grün', '#00aa00', self.BACKGROUND_COLOR],
                                  '3': ['Dunkel Türkis', '#00aaaa', self.BACKGROUND_COLOR],
                                  '4': ['Dunkel Rot', '#aa0000', self.BACKGROUND_COLOR],
                                  '5': ['Lila', '#aa00aa', self.BACKGROUND_COLOR],
                                  '6': ['Gold', '#ffaa00', self.BACKGROUND_COLOR],
                                  '7': ['Grau', '#aaaaaa', self.BACKGROUND_COLOR],
                                  '8': ['Dunkel Grau', '#555555', self.BACKGROUND_COLOR],
                                  '9': ['Blau', '#5555ff', self.BACKGROUND_COLOR],
                                  'a': ['hell Grün', '#55ff55', self.BACKGROUND_COLOR],
                                  'b': ['Türkis', '#55ffff', self.BACKGROUND_COLOR],
                                  'c': ['Rot', '#ff5555', self.BACKGROUND_COLOR],
                                  'd': ['Rosa', '#ff55ff', self.BACKGROUND_COLOR],
                                  'e': ['Gelb', '#ffff55', self.BACKGROUND_COLOR],
                                  'f': ['Weiß', '#ffffff', self.BACKGROUND_COLOR],
                                  'k': ['Zufällige Zeichen', None, '?'],
                                  'l': ['Fett schreiben', None, 'F'],
                                  'm': ['Durchgestrichen', None, '-'],
                                  'n': ['Unterstrichen', None, 'U'],
                                  'o': ['schräg schreiben', None, 'K'],
                                  'r': ['Zurücksetzten', '#ffffff', self.BACKGROUND_COLOR]}

        self.window = tkinter.Toplevel(bg=self.BACKGROUND_COLOR)
        self.window.title('Minecraft remote console client  ' + version)
        self.window.protocol("WM_DELETE_WINDOW", exit_func)
        self.window.wm_iconbitmap(os.path.join(icon_path, 'icon.ico'))
        self.window.resizable(0, 0)

        self.entrys_frame = tkinter.Frame(self.window, bg=self.BACKGROUND_COLOR)
        self.entrys_frame.pack(fill='x')
        tkinter.Label(self.entrys_frame, text='Host:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).pack(side='left')
        self.host_entry = tkinter.Entry(self.entrys_frame, width=30, bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.host_entry.pack(side='left', padx=15)
        tkinter.Label(self.entrys_frame, text='Port:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).pack(side='left')
        self.port_entry = tkinter.Entry(self.entrys_frame, width=6, bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.port_entry.pack(side='left', padx=15)
        self.port_entry.insert('end', '25575')
        tkinter.Label(self.entrys_frame, text='Passwort:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).pack(side='left')
        self.password_entry = tkinter.Entry(self.entrys_frame, width=20, show='*', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.password_entry.pack(side='left', padx=15)
        self.connect_button = tkinter.Button(self.entrys_frame, text='Verbinden', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, activeforeground='#000000',
                                             activebackground=self.TEXT_COLOR, command=self.connect)
        self.connect_button.pack(side='right', ipadx=10)
        self.connect_button.bind("<Return>", self.connect)
        

        self.textframe = tkinter.Frame(self.window)
        self.textframe.pack()
        self.scrollbar = tkinter.Scrollbar(self.textframe, bg=self.BACKGROUND_COLOR, troughcolor=self.TEXT_COLOR)
        self.scrollbar.pack(side='right', fill='y')
        self.output_text = tkinter.Text(self.textframe, height=15, state='disable', bg=self.BACKGROUND_COLOR, yscrollcommand=self.scrollbar.set)
        self.output_text.pack(side='left', expand=True, fill='x')
        self.scrollbar.config(command=self.output_text.yview)

        for tag_name in self.colors_and_styles:
            if not self.colors_and_styles[tag_name][1] is None:
                self.output_text.tag_config(tag_name, foreground=self.colors_and_styles[tag_name][1], background=self.colors_and_styles[tag_name][2])

        self.output('§4[info]§r: -help eigeben um befehlsübersicht anzuzeigen')

##        self.output('§0T§1T§2T§3T§4T§5T§6T§7T§8T§9T§aT§bT§cT§dT§eT§fT')
##        self.output('§4R§6e§eg§ae§bn§3b§1o§5g§4e§cn')


        self.colors_frame = tkinter.Frame(self.window, bg=self.BACKGROUND_COLOR)
        self.colors_frame.pack(fill='x')
        tkinter.Label(self.colors_frame, text='Farben:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).pack(side='left')
        self.command_entry = tkinter.Entry(self.window, bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.font_style_Frame = tkinter.Frame(self.colors_frame)
        self.font_style_Frame.pack(side='left', padx=15)

        column_count = 0
        for tag_name in self.colors_and_styles:
            if tag_name == 'r':
                tkinter.Button(self.font_style_Frame, text='N', width=2, relief='groove',
                               bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR,
                               activeforeground=self.BACKGROUND_COLOR,
                               activebackground=self.TEXT_COLOR,
                               command=functools.partial(self.command_entry.insert, 'insert', '§'+tag_name)).grid(row=0, column=column_count)
            elif not self.colors_and_styles[tag_name][1] is None:
                tkinter.Button(self.font_style_Frame, text=tag_name, foreground=self.colors_and_styles[tag_name][1],
                               background=self.colors_and_styles[tag_name][1],
                               activeforeground=self.colors_and_styles[tag_name][1],
                               activebackground=self.colors_and_styles[tag_name][1],
                               width=2, relief='groove',
                               command=functools.partial(self.command_entry.insert, 'insert', '§'+tag_name)).grid(row=0, column=column_count)
            else:
                tkinter.Button(self.font_style_Frame, text=self.colors_and_styles[tag_name][2],
                               width=2, relief='groove',
                               bg=self.BACKGROUND_COLOR,
                               fg=self.TEXT_COLOR,
                               activeforeground=self.BACKGROUND_COLOR,
                               activebackground=self.TEXT_COLOR,
                               command=functools.partial(self.command_entry.insert, 'insert', '§'+tag_name)).grid(row=0, column=column_count)
            column_count += 1
            
        tkinter.Button(self.colors_frame, text='Verbindung trennen', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, activeforeground=self.BACKGROUND_COLOR,
                                             activebackground=self.TEXT_COLOR, command=self.disconnect).pack(side='right')
        
        self.command_entry.pack(fill='x')
        self.command_entry.bind("<Return>", self.sendcommand)
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Py-Prog

Bei mir hat sich die Geometrie des Farbdialogfensters mit deinem modifizierten Skrip praktisch nicht verändert. Da die Geometrie von Label-, Entry-, Button- und Text-Widgets durch den von Tkinter verwendeten Zeichsatz bestimmt wird kann es eventuell auf den verschiedenen OS Abweichungen geben. Soviel ich weiss wird die Geometrie beim Text-Widget ausschliesslich durch den verwendeten Font bestimmt. Die Breite und Höhe kann nur mit Zeichen-Einheiten (nicht Pixels) festgelegt werden. Es ist nicht möglich das Text-Widget mit den Layout-Optionen 'sticky' bzw 'fill' zu ziehen.

Hier unter Kubuntu nehmen die Schaltflächen für die Farbselektion nicht eine quadratische sondern eine rechteckige Form an. Ist möglich das Tkinter das Geometriehandling and widgetinterne pading unter Kubuntu bzw. Linux anderst durchführt als bei Windows.

OK. Gruß wuf :wink:
Take it easy Mates!
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Und jetzt? Ich habs jetzt nochmal so gemacht das sich der Text anpasst, und wenn das OS nicht Windows ist dann werden die Buttons bloß einen Buchstaben breit.
Ach ja, und wie siehts mit der Anordnung in der ersten Zeile aus, und werden jetzt endlich alle Farb-Buttons angezeigt?

Code: Alles auswählen

        self.BACKGROUND_COLOR = '#000000'
        self.TEXT_COLOR = '#00ff00'
        
        self.client = None
        self.client_commands = {'-cls': [self.clear_output, 'Löscht den ihnhalt der Konsole'],
                                '-clear': [self.clear_output, 'Löscht den ihnhalt der Konsole'],
                                '-disconnect': [self.disconnect, 'Trennt die Verbindung zum aktuell verbundenen server'],
                                '-colors': [self.help_colors_and_styles, '§cHilfe §dzur §6Schriftformatierung'],
                                '-help': [self.help_commands, 'Zeigt diese befehlsübersicht an'],}

        self.colors_and_styles = {'0': ['Schwarz', '#000000', '#ffffff'],
                                  '1': ['Dunkel Blau', '#0000aa', self.BACKGROUND_COLOR],
                                  '2': ['Dunkel Grün', '#00aa00', self.BACKGROUND_COLOR],
                                  '3': ['Dunkel Türkis', '#00aaaa', self.BACKGROUND_COLOR],
                                  '4': ['Dunkel Rot', '#aa0000', self.BACKGROUND_COLOR],
                                  '5': ['Lila', '#aa00aa', self.BACKGROUND_COLOR],
                                  '6': ['Gold', '#ffaa00', self.BACKGROUND_COLOR],
                                  '7': ['Grau', '#aaaaaa', self.BACKGROUND_COLOR],
                                  '8': ['Dunkel Grau', '#555555', self.BACKGROUND_COLOR],
                                  '9': ['Blau', '#5555ff', self.BACKGROUND_COLOR],
                                  'a': ['hell Grün', '#55ff55', self.BACKGROUND_COLOR],
                                  'b': ['Türkis', '#55ffff', self.BACKGROUND_COLOR],
                                  'c': ['Rot', '#ff5555', self.BACKGROUND_COLOR],
                                  'd': ['Rosa', '#ff55ff', self.BACKGROUND_COLOR],
                                  'e': ['Gelb', '#ffff55', self.BACKGROUND_COLOR],
                                  'f': ['Weiß', '#ffffff', self.BACKGROUND_COLOR],
                                  'k': ['Zufällige Zeichen', None, '?'],
                                  'l': ['Fett schreiben', None, 'F'],
                                  'm': ['Durchgestrichen', None, '-'],
                                  'n': ['Unterstrichen', None, 'U'],
                                  'o': ['schräg schreiben', None, 'K'],
##                                  'a': ['a', None, 'a'],
##                                  'b': ['b', None, 'b'],
##                                  'c': ['c', None, 'c'],
##                                  'd': ['d', None, 'd'],
##                                  'e': ['e', None, 'e'],
##                                  'f': ['f', None, ''],
##                                  'g': ['g', None, 'g'],
##                                  'h': ['h', None, 'h'],
##                                  'i': ['i', None, 'i'],
##                                  'j': ['j', None, 'j'],
                                  'r': ['Zurücksetzten', '#ffffff', self.BACKGROUND_COLOR]}

        self.window = tkinter.Toplevel(bg=self.BACKGROUND_COLOR)
        self.window.title('Minecraft remote console client  ' + version)
        self.window.protocol("WM_DELETE_WINDOW", exit_func)
        self.window.wm_iconbitmap(os.path.join(icon_path, 'icon.ico'))
        self.window.resizable(0, 0)

        self.entrys_frame = tkinter.Frame(self.window, bg=self.BACKGROUND_COLOR)
        self.entrys_frame.pack(fill='x')
        tkinter.Label(self.entrys_frame, text='Host:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).pack(side='left')
        self.host_entry = tkinter.Entry(self.entrys_frame, width=30, bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.host_entry.pack(side='left', padx=15)
        tkinter.Label(self.entrys_frame, text='Port:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).pack(side='left')
        self.port_entry = tkinter.Entry(self.entrys_frame, width=6, bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.port_entry.pack(side='left', padx=15)
        self.port_entry.insert('end', '25575')
        tkinter.Label(self.entrys_frame, text='Passwort:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).pack(side='left')
        self.password_entry = tkinter.Entry(self.entrys_frame, width=20, show='*', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.password_entry.pack(side='left', padx=15)
        self.connect_button = tkinter.Button(self.entrys_frame, text='Verbinden', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, activeforeground='#000000',
                                             activebackground=self.TEXT_COLOR, command=self.connect)
        self.connect_button.pack(side='right', ipadx=10)
        self.connect_button.bind("<Return>", self.connect)
        

        self.textframe = tkinter.Frame(self.window)
        self.textframe.pack(fill='x')
        self.scrollbar = tkinter.Scrollbar(self.textframe, bg=self.BACKGROUND_COLOR, troughcolor=self.TEXT_COLOR)
        self.scrollbar.pack(side='right', fill='y')
        self.output_text = tkinter.Text(self.textframe, height=15, state='disable', bg=self.BACKGROUND_COLOR, yscrollcommand=self.scrollbar.set)
        self.output_text.pack(side='left', expand=True, fill='x')
        self.scrollbar.config(command=self.output_text.yview)

        for tag_name in self.colors_and_styles:
            if not self.colors_and_styles[tag_name][1] is None:
                self.output_text.tag_config(tag_name, foreground=self.colors_and_styles[tag_name][1], background=self.colors_and_styles[tag_name][2])

        self.output('§4[info]§r: -help eigeben um befehlsübersicht anzuzeigen')

##        self.output('§0T§1T§2T§3T§4T§5T§6T§7T§8T§9T§aT§bT§cT§dT§eT§fT')
##        self.output('§4R§6e§eg§ae§bn§3b§1o§5g§4e§cn')


        self.colors_frame = tkinter.Frame(self.window, bg=self.BACKGROUND_COLOR)
        self.colors_frame.pack(fill='x')
        tkinter.Label(self.colors_frame, text='Farben:', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR).pack(side='left')
        self.command_entry = tkinter.Entry(self.window, bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, insertbackground=self.TEXT_COLOR)
        self.font_style_Frame = tkinter.Frame(self.colors_frame)
        self.font_style_Frame.pack(side='left', padx=15)

        button_width = 2
        if sys.platform != 'win32':
            button_width = 0
        
        column_count = 0
        for tag_name in self.colors_and_styles:
            if tag_name == 'r':
                tkinter.Button(self.font_style_Frame, text='N', width=button_width, relief='groove',
                               bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR,
                               activeforeground=self.BACKGROUND_COLOR,
                               activebackground=self.TEXT_COLOR,
                               command=functools.partial(self.command_entry.insert, 'insert', '§'+tag_name)).grid(row=0, column=column_count)
            elif not self.colors_and_styles[tag_name][1] is None:
                tkinter.Button(self.font_style_Frame, text=tag_name, width=button_width,
                               foreground=self.colors_and_styles[tag_name][1],
                               background=self.colors_and_styles[tag_name][1],
                               activeforeground=self.colors_and_styles[tag_name][1],
                               activebackground=self.colors_and_styles[tag_name][1], relief='groove',
                               command=functools.partial(self.command_entry.insert, 'insert', '§'+tag_name)).grid(row=0, column=column_count)
            else:
                tkinter.Button(self.font_style_Frame, text=self.colors_and_styles[tag_name][2], width=button_width, relief='groove',
                               bg=self.BACKGROUND_COLOR,
                               fg=self.TEXT_COLOR,
                               activeforeground=self.BACKGROUND_COLOR,
                               activebackground=self.TEXT_COLOR,
                               command=functools.partial(self.command_entry.insert, 'insert', '§'+tag_name)).grid(row=0, column=column_count)
            column_count += 1
            
        tkinter.Button(self.colors_frame, text='Verbindung trennen', bg=self.BACKGROUND_COLOR, fg=self.TEXT_COLOR, activeforeground=self.BACKGROUND_COLOR,
                                             activebackground=self.TEXT_COLOR, command=self.disconnect).pack(side='right')
        
        self.command_entry.pack(fill='x')
        self.command_entry.bind("<Return>", self.sendcommand)
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Py-Prog

Super! Du hast es geschafft! Nun sieht es wie folgt aus:

Bild

Gruß wuf :wink:
Take it easy Mates!
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Jetzt wo ich den GUI so hinbekommen habe wie er sein soll muss ich jetzt bloß noch ein paar Virtueller Maschinen zum laufen bringen, du kannst ja nicht dauernd für mich GUIs testen.

Danke für die hilfe.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Kann mir wer sagen wie man unter Linux Programme installiert? Ich habs gestern endlich geschafft Debian 6.0.4 in Virtuallbox zu installieren. Ich hab das Paket mit Python 3.2.3 schon runter geladen und entpackt. Aber wenn ich dann in der Konsole ./configure eingebe findet der irgendwie keinen Compiler. Und da ich ja nie mit Linux arbeite weiß ich nicht wie ich neue Programme installieren kann. Kann mir bitte wer helfen?
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Unter Linux werden Paketmanager genutzt, d.h. bei Debian wäre es apt-get, bzw. aptitude oder synaptic. Generell ist es empfehlenswert sich in die Nutzung der Kommandozeile einarbeiten um auszuschließen, dass es nicht doch ein vollkommen anderes Problem ist.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Und was muss ich jetzt tun das ich aus dem Entpackten Archiv ein Funktionierendes Python bekomme?
Ich hab sowas noch nie gemacht und da einfach so ein Paar befehle nützen mir nichts, ich hab heute schon mal den Befehl ausprobiert weil ich den auf einer Webseite gefunden habe, aber da wurden dann einige Pakete nicht gefunden, aber der Befehl war für Python 3.x.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
BlackJack

@Py-Prog: Warum willst Du überhaupt ein Python übersetzen? Man lädt unter Linux für die meiste Software nicht etwas von irgendwelchen im Netz verstreuten Webseiten herunter sondern schaut in der Regel erst einmal ob man es einfach über die Paketverwaltung installieren kann. Was gefällt Dir an dem Python aus der Paketverwaltung denn nicht?
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Die Paketverwaltung funktioniert überhaupt nicht, ich gebe ein apt-get update, und dann apt-cache search gcc und dann apt-get install gcc-4.4-base (oder so ähnlich) und dann steht da 0 installiert, und bei den allem was dann da steht 0. Außerdem finde ich kein Python3 in der Paket Verwaltung.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
lunar

@Py-Prog: Die Paketverwaltung funktioniert, nur kannst Du sie offensichtlich nicht bedienen. Kopiere die Ausgabe, dann können wir Dir auch weiterhelfen. Im Allgemeinen kann man mit "sudo aptitude install" ein Paket installieren. Den Namen des Pakets kannst Du über eine Suche auf http://www.debian.org/distrib/packages herausfinden. Du kannst auch eine graphische Oberfläche, beispielsweise PackageKit oder Synaptics verwenden.
Py-Prog
User
Beiträge: 673
Registriert: Dienstag 16. Februar 2010, 17:52
Wohnort: G:\ermany

Ich habe in der Konsole (mit root rechten) das eingegeben:
aptitude install python3
und die Ausgabe war dann das:

Code: Alles auswählen

Keine Kandidatsversion für »python3« gefunden
Keine Kandidatsversion für »python3« gefunden
Es werden keine Pakete installiert, aktualisiert oder entfernt.
0 Pakete aktualisiert, 0 zusätzlich installiert, 0 werden entfernt und 81 nicht aktualisiert.
Muss 0 B an Archiven herunterladen. Nach dem Entpacken werden 0 B zusätzlich belegt sein.
Das steht immer da. Egal was ich für ein Paket nehme.
Technik ist: wenn alles funktioniert und keiner weiß warum.
Wer Rechtschreibfehler findet darf sie behalten.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hast du überhaupt die entsprechenden Paketquellen? Was ist denn die ausgabe von ``aptitude update``?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten