Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 3.
Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen, varChk und Fenster kommen aus dem nichts. Man vergleicht nicht explizit auf True, denn das würde ja doch wieder nur True (oder False) ergeben. Benutze keine kryptischen Abkürzungen, Variablennamen schreibt man komplett klein.
Funktionen sollten nach Tätigkeiten benannt werden. Jetzt hast Du das Problem, dass Deine Funktion (fast) gleich wie ein StringVar-Objekt heißt.
Du machst nichts "sichtbar" sondern erzeugst eine neues Entry. Alle Widgets sollten schon zum Zeitpunkt des Erzeugens des Fensters angelegt werden.
cb ist nicht nur ein schlechter Name, sondern auch an None gebunden, was die Variable ziemlich nutzlos macht.
Code: Alles auswählen
import tkinter as tk
from tkinter import messagebox
from functools import partial
def zeige_zusatztext_an(zusatz_text_angezeigt, entry):
if zusatz_text_angezeigt.get():
messagebox.showinfo(message="eingabefeld sichtbar")
entry.pack()
else:
messagebox.showinfo(message="eingabefeld unsichtbar")
entry.pack_forget()
def main():
fenster = tk.Tk()
zusatz_text = tk.StringVar(fenster, "")
zusatz_text_angezeigt = tk.BooleanVar(fenster)
entry = tk.Entry(fenster, text="Punkt-Nr.", textvariable=zusatz_text, font=("arial", 10), width=12, bd=3)
tk.Checkbutton(fenster, text="Zeichen anfügen", font=("arial",10), variable=zusatz_text_angezeigt,
command=partial(zeige_zusatztext_an, zusatz_text_angezeigt, entry)).pack()
fenster.mainloop()
if __name__ == "__main__":
main()