disabled entry nicht erkennbar

Fragen zu Tkinter.
Antworten
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

Hallo,

ich bin dabei ein Tabellenblatt zu erstellen, so wie das in der tkintertable realisiert ist - allerdings für Python3.

Mein erster Versuch ist sozusagen eine Tabelle die zeilenweise aufgebaut ist. Ich bin dabei von Entry's ausgegangen, die ich erweitert habe. Dabei sollte die Tabelle auch spaltenweise ``disabled`` oder ``readonly`` geschaltet werden können, so wie dies in der Doku des New-Mexiko-Tech für das Entry angegeben ist (Attribut ``state`` für das Entry).

Schalte ich ein solches Entry jedoch auf ``readonly`` oder ``disabled`` dann kann ich nichts mehr lesen???

Hier mein Code:

Code: Alles auswählen

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


"""
Modul: sejtable.view
=====================================================================

Simulation eines Tabellengrids, wobei die Zellen im
Tabellenblatt vom Typ ``tkinter.Entry`` sind.
"""


import logging
import tkinter as tk


Logger = logging.getLogger("sejtable")


class TkCell(tk.Entry):
    def __init__(self, master, value, row=-1, col=-1, **kwargs):

        kwargs["relief"] = "flat"
        tk.Entry.__init__(self, master, **kwargs)

        # Init von TkCell

        Logger.debug("<%s> init starts [value=%s, row=%s, col=%s, %s",
                     self.__class__.__name__, value, row, col, kwargs)

        self.col = int(col)
        self.row = int(row)
        self.insert(0, value)

        Logger.debug("<%s> init done", self.__class__.__name__)


def _tests_():
    logging.basicConfig(level=10, name="sejtable")

    root = tk.Tk()
    normal = TkCell(root, "1, 1", 1, 1,
                    state="normal")
    normal.grid(row=1, column=1)

    readonly = TkCell(root, "2, 1", 2, 1,
                      state="readonly")
    readonly.grid(row=2, column=1)

    disabled = TkCell(root, "3, 1", 2, 1,
                      state="disabled")
    disabled.grid(row=3, column=1)

    root.mainloop()


if __name__ == '__main__':
    _tests_()
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Du machst da auch etwas falsch. Zuerst musst Du etwas reinschreiben und erst danach auf readonly setzen.
Denn wenn Du das gleich auf readonly stellst, kannst Du nichts reinschreiben. Also:

Code: Alles auswählen

readonly = TkCell(root, "2, 1", 2, 1)
readonly['state']="readonly"
Zuletzt geändert von Alfons Mittelmeyer am Montag 12. Oktober 2015, 21:30, insgesamt 1-mal geändert.
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

ja das klingt absolut schlüssig...

Vielen Dank
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@sedi

Ja so schlüssig ist es auch wieder nicht. Man würde ja erwarten, dass nur der User nichts eingeben kann, dass man aber selber per Programm schon etwas hineinschreiben kann.
Aber ist eben Fakt in tkinter, dass das dann auch nicht geht.

Diesen Fall hatte ich bei meinem GuiDesigner auch.
Antworten