سؤال

وبعد أن لعبت في جميع أنحاء قليلا مع كل Tkinter وكسبيثون، أنا أحب Tkinter أفضل بكثير من حيث كيفية تنظيف يبدو لي شفرة المصدر. ومع ذلك، فإنه لا يبدو أن لديها العديد من الميزات. على وجه الخصوص ليس لديها علامات التبويب (كما هو الحال في علامات التبويب في الجزء العلوي من نافذة فايرفوكس).

وA غوغلينغ قليلا على هذا الموضوع يقدم بعض الاقتراحات. هناك href="http://code.activestate.com/recipes/188537/" إدخال كتاب طبخ مع فئة مما يتيح لك استخدام علامات التبويب، لكنها بدائية جدا. هناك أيضا بيثون megawidgets على سورس، على الرغم من أن هذا يبدو قديمة جدا وأعطاني أخطاء أثناء التثبيت.

هل لديها الخبرة مما يجعل اجهات تفاعلية في Tkinter؟ ماذا استخدمت؟ أم أنها مجرد حالة أن أي شخص يحتاج مكونات النوافذ أكثر قوة أن استخدام كسبيثون؟

هل كانت مفيدة؟

المحلول

في بيثون الأخير (> 2.7) الإصدارات، يمكنك استخدام ttk وحدة، والتي توفر الوصول إلى <م> تاكا تحت عنوان القطعة مجموعة، والتي تم تقديمها في Tk 8.5.

وهنا كيف يمكنك استيراد ttk في بايثون 2:

import ttk

help(ttk.Notebook)

في بيثون 3، و ttk وحدة يأتي مع التوزيعات القياسية باعتباره حدة ثانويه من tkinter .

وفيما يلي مثال عملي بسيط يقوم على سبيل المثال من TkDocs الموقع:

from tkinter import ttk
import tkinter as tk
from tkinter.scrolledtext import ScrolledText


def demo():
    root = tk.Tk()
    root.title("ttk.Notebook")

    nb = ttk.Notebook(root)

    # adding Frames as pages for the ttk.Notebook 
    # first page, which would get widgets gridded into it
    page1 = ttk.Frame(nb)

    # second page
    page2 = ttk.Frame(nb)
    text = ScrolledText(page2)
    text.pack(expand=1, fill="both")

    nb.add(page1, text='One')
    nb.add(page2, text='Two')

    nb.pack(expand=1, fill="both")

    root.mainloop()

if __name__ == "__main__":
    demo()

وثمة بديل آخر هو استخدام القطعة NoteBook من المكتبة tkinter.tix . لاستخدام tkinter.tix، يجب أن يكون لديك الحاجيات Tix المثبتة، عادة إلى جانب تثبيت الحاجيات Tk. لاختبار التثبيت، جرب ما يلي:

from tkinter import tix
root = tix.Tk()
root.tk.eval('package require Tix')

لمزيد من المعلومات، راجع هذه على موقع PSF .

لاحظ أن tix قديمة جدا وغير معتمدة بشكل جيد، لذلك افضل خيار لكم قد يكون للذهاب لttk.Notebook.

نصائح أخرى

وإذا كان أي شخص لا تزال تبحث، لقد حصلت على هذا العمل كما علامة تبويب في tkinter. لعب حولها مع رمز لجعلها تعمل بالطريقة التي تريدها (على سبيل المثال، يمكنك إضافة زر لإضافة علامة تبويب جديدة):

from tkinter import *

class Tabs(Frame):

    """Tabs for testgen output"""

    def __init__(self, parent):
        super(Tabs, self).__init__()
        self.parent = parent
        self.columnconfigure(10, weight=1)
        self.rowconfigure(3, weight=1)
        self.curtab = None
        self.tabs = {}
        self.addTab()                
        self.pack(fill=BOTH, expand=1, padx=5, pady=5)

    def addTab(self):
        tabslen = len(self.tabs)
        if tabslen < 10:
            tab = {}
            btn = Button(self, text="Tab "+str(tabslen), command=lambda: self.raiseTab(tabslen))
            btn.grid(row=0, column=tabslen, sticky=W+E)

            textbox = Text(self.parent)
            textbox.grid(row=1, column=0, columnspan=10, rowspan=2, sticky=W+E+N+S, in_=self)

            # Y axis scroll bar
            scrollby = Scrollbar(self, command=textbox.yview)
            scrollby.grid(row=7, column=5, rowspan=2, columnspan=1, sticky=N+S+E)
            textbox['yscrollcommand'] = scrollby.set

            tab['id']=tabslen
            tab['btn']=btn
            tab['txtbx']=textbox
            self.tabs[tabslen] = tab
            self.raiseTab(tabslen)

    def raiseTab(self, tabid):
        print(tabid)
        print("curtab"+str(self.curtab))
        if self.curtab!= None and self.curtab != tabid and len(self.tabs)>1:
                self.tabs[tabid]['txtbx'].lift(self)
                self.tabs[self.curtab]['txtbx'].lower(self)
        self.curtab = tabid


def main():
    root = Tk()
    root.geometry("600x450+300+300")
    t = Tabs(root)
    t.addTab()
    root.mainloop()

if __name__ == '__main__':
    main()

وعلى الرغم من أنه قد لا تساعدك في لحظة والمعارف التقليدية 8.5 يأتي مع مجموعة موسعة من الحاجيات. هذه المجموعة الموسعة يتوفر مع المعارف التقليدية 8.4 عن طريق امتدادا المعروفة باسم "البلاط". وشملت في مجموعة موسعة من الحاجيات هو القطعة دفتر الملاحظات. لسوء الحظ، في هذا الوقت Tkinter افتراضيا يستخدم نسخة قديمة إلى حد ما تاكا التي لا تأتي مع هذه الحاجيات.

وكانت هناك جهود لجعل البلاط المتاحة لTkinter. تحقق من http://tkinter.unpythonic.net/wiki/TileWrapper . لجهد آخر مماثل رؤية http://pypi.python.org/pypi/pyttk . أيضا، لتذوق كيف تبدو هذه الحاجيات (في روبي، وبيرل وتى سى ال) راجع HTTP: //www.tkdocs. كوم / .

وتاكا 8.5 هو تحسن ضخمة على تاكا الأسهم. إنه يطرح جملة من الحاجيات الجديدة، والحاجيات الأم، ومحرك سمات. نأمل أنها سوف تكون متاحة بشكل افتراضي في Tkinter يوما ما قريبا. سيئة للغاية في العالم بيثون لا يزال متخلفا لغات أخرى.

تحديث: أحدث إصدارات بيثون الآن تشمل دعم الحاجيات تحت عنوان من خارج منطقة الجزاء. _

و"أم أنها مجرد حالة أن أي شخص يحتاج مكونات النوافذ أكثر قوة أن استخدام كسبيثون؟"
الجواب باختصار: نعم

والإجابة الطويلة: قد يستغرق بعض الممارسات لرمز كسبيثون ليشعر "نظيفة"، ولكن من أجمل وأكثر قوة من Tkinter. سوف تحصل أيضا على دعم أفضل، منذ أكثر الناس استخدامها هذه الأيام.

ما هي المشاكل هل لديك مع PMW؟ أنها قديمة، نعم، ولكن هذا الثعبان النقي لذلك يجب أن تعمل.

لاحظ أن TIX لا يعمل مع py2exe، إذا كان هذا هو مشكلة بالنسبة لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top