Tkinter açılabilir yazı

Merhaba ben yazdığım bir programa yardım ve geri bildirim amaçlı mail adresi gibi şeyleri ekleyeceğim ancak düzgün bir arayüz yapamadım ve aklıma açılabilir yazı geldi (hani bu uzun yazıların solunda küçük üçgen var ya o ) bunu nasıl yapabilirim veya daha kullanışlı bir şey var mı bildiğiniz?

Merhaba,

Pencere çubuğunun altında menü oluştur. Hani şu tarz oluyor ya;

Ekran Alıntısı

Dosya yazan yerde mesela sen program yaz. Açılır menü olsun ve alt menülerinde şunlar yer alsın.

Hazırlayan
Yardım

Bunlara tıklandığı zaman yazacağın metne göre ufak bir pencere tasarla tıklayınca açılsın pencerede yazsın işte mesela yardıma tıkladı

Program hakkında yardım almak için;
e_mail_adı@domain_adresin.com

gibi. Tabi bu anlatıldığı kadar ilkel tasarlamak hoş görünmez. Zenginleştirmek lazım. Ben sadece fikir olsun diye söyledim.

1 Beğeni

Buda olabilecek bir şey elbette ancak o tip açılır kısmı nasıl yaptığımızı bilmiyorum daha eğer biliyorsanız kısaca özetleyebilrimisiniz?


https://pythonbasics.org/tkinter-menu/

Merhaba, aşağıdaki gibi bir açılabilir bir pencere mi istiyordunuz?

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

import tkinter as tk

from tkinter import ttk


class Checkbutton(ttk.Checkbutton):
    def __init__(self, widget: tk.Frame, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.pack(side="left")
        self.var = tk.IntVar()
        self.style = ttk.Style()
        self.style.configure(
            "Toolbutton", 
            highlightthickness=0,
            borderwidth=0
        )
        self.style.map(
            "Toolbutton",
            background=[("hover", self.master.cget("bg"))]
        )
        self.configure(
            variable=self.var,
            text="\u25BD", 
            style="Toolbutton", 
            command=lambda: self.expand(widget),
        )
        
    def expand(self, widget: tk.Frame):
        if self.var.get():
            self.configure(
                text="\u25B3"
            )
            widget.grid(row=1, column=0, sticky="nw")
        else:
            self.configure(
                text="\u25BD"
            )
            widget.grid_forget()


class ExpandableFrame(tk.Frame):
    def __init__(self, title: str, content: str, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.pack(fill="both")
        self.top_frame = tk.Frame(master=self)
        self.top_frame.grid(row=0, column=0, sticky="nw")
        self.bottom_frame = tk.Frame(master=self)
        self.checkbutton = Checkbutton(
            master=self.top_frame, 
            widget=self.bottom_frame
        )
        self.title = tk.Label(
            master=self.top_frame, 
            text=title, 
            font="Arial 12 bold"
        )
        self.title.pack(side="left")
        self.content = tk.Text(
            master=self.bottom_frame, 
            font="Arial 10",
            wrap="word",
            background=self.master.cget("bg"),
            width=50,
            height=5,
            bd=0
        )
        self.content.insert("insert", content)
        self.content["state"] = "disabled"
        self.content.pack(fill="both")
        

root = tk.Tk()

texts = {
    "Django": "Django is a Python-based free and open-source web framework that follows the model-view-controller architectural pattern. It is maintained by the Django Software Foundation, an American independent organization established as a 501 non-profit.",
    "Flask": "Flask is a micro web framework written in Python. It is classified as a microframework because it does not require particular tools or libraries. It has no database abstraction layer, form validation, or any other components where pre-existing third-party libraries provide common functions."
}

for title, content in texts.items():
    ExpandableFrame(master=root, title=title, content=content)

root.mainloop()

2020-08-25 18-26-52 ekran görüntüsü

2020-08-25 18-27-31 ekran görüntüsü

2020-08-25 18-28-10 ekran görüntüsü

2020-08-25 18-28-04 ekran görüntüsü

1 Beğeni

çok isterim lakin buna şu sıralar pek imkanım olmuyor bir şekilde sakin kafayla eve geçtiğimde örnek olarak atarım

@dildeolupbiten Tam anlamıyla istediğim şey bu görselde var eğer programa sorunsuz entegre edersem bunu kullanacağım teşekkür ederim

Bunu denemedim ancak mantığını anlayamadım denediğim zaman sorun yaşıyorum her seferinde bazı eksikler olduğunu söylüyor sebebi şu orada

from tkinter import *

bu şekilde yapılmış ancak ben

import tkinter as tk 

şeklinde yazdım bu yüzden olmuyor hala düzeltmeye çalışıyorum gerekli yerlere tk eklemeye çalışıyorum umarım tutar çünkü benim çok hoşuma gitti

Yanlışlık yok. Birincisi tüm herşeyi içeri aktarırken ikincisi sadece tkinter modülünü içeri aktarıp tk olarak isimlendirmiş. Birincisinde, sadece pencere aracının adını yazarak kullanabilirsiniz, ikincisinde tk. ile kullanabilirsiniz. Şöyle yani;

from tkinter import *
pencere = Tk()
import tkinter as tk
pencere = tk.Tk()
1 Beğeni

from tkinter import * dediğiniz zaman tkinter içerisindeki her şeyi kendi başına kullanabilme imkanınız oluyor.

from tkinter as tk dediğiniz zaman tkinter’ı bundan sonra tk olarak adlandırıp kullanacağın anlamına geliyor.

İkisinin arasındaki tek fark sözdimi. * kullandığın zaman Tk() yazarsın, as tk kullandığın zaman tk.Tk() kullanırsın.

Örnekler;

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Hello World\n(click me)"
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")

        self.quit = tk.Button(self, text="QUIT", fg="red",
                              command=self.master.destroy)
        self.quit.pack(side="bottom")

    def say_hi(self):
        print("hi there, everyone!")

root = tk.Tk()
app = Application(master=root)
app.mainloop()

Aynı kodun * kullanarak yazınca da böyle oluyor;

from tkinter import *

class Application(Frame): #burası değişti
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.hi_there = Button(self) #burası değişti
        self.hi_there["text"] = "Hello World\n(click me)"
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")

        self.quit = Button(self, text="QUIT", fg="red", #burası değişti
                              command=self.master.destroy)
        self.quit.pack(side="bottom")

    def say_hi(self):
        print("hi there, everyone!")

root = Tk() #burası değişti
app = Application(master=root)
app.mainloop()
1 Beğeni

2 şekilde de import edebilirsiniz:

from tkinter import *
import tkinter as tk

Aynı dosyada bulunuyor bu kodlar.

1 Beğeni