Python 3.1 Tkinter تخطيط المساعدة. أنا قريب، الرجاء مساعدتي في الانتهاء من هذا

StackOverflow https://stackoverflow.com/questions/2217526

سؤال

أنا أستخدم بيثون 3.1 بالمناسبة.

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

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

شكرا لك، رمزي أدناه:

class App:
    def __init__(self, parent):
        frame = Frame(parent)
        self.__setup_gui(frame) # Call Helper
        frame.pack(padx=15, pady=15)
        parent.title('To be changed')

    def __setup_gui(self, frame):

        # First Row
        self.cs_label = Label(frame, text='Change Set: ')
        self.cs_label.pack(side=LEFT, padx=10, pady=10)

        self.cs_val = Entry(frame, width=10)
        self.cs_val.pack(side=LEFT, padx=10, pady=10)

        self.get_button = Button(frame, text='Get', command=self.get_content)
        self.get_button.pack(side=LEFT, padx=10, pady=10)

        # Text area and scrollbar
        self.text_area = Text(frame, height=10, width=50, background='white')
        # Put a scroll bar in the frame
        scroll = Scrollbar(frame)
        self.text_area.configure(yscrollcommand=scroll.set)
        self.text_area.pack(side=TOP)
        scroll.pack(side=RIGHT,fill=Y)

        self.clipboard_var = IntVar()
        self.notepad_var = IntVar()

    def get_content(self):
        print(self.clipboard_var.get())
        print(self.notepad_var.get())

###################################################################################################

if __name__ == '__main__':
    root = Tk()
    app = App(root)
    root.mainloop()
هل كانت مفيدة؟

المحلول

هل تريد بالتأكيد مدير الشبكة - حزمة تعمل فقط للحصول على مكتوبة رأسية أو أفقية بحد ذاتها. يمكنك استخدام إطارات متعددة للعمل حولها، لكنني أجد أنه من الأسهل توسيع واجهة المستخدم الرسومية إذا قمت بذلك فقط مع الشبكة للبدء.

إليك ما عملت فيه بسرعة بناء على ما قلته والرمز. لقد خفضت / أزال الحشو - بدا الأمر ضخما بالنسبة لي - وأعيدت اثنين من التمريض، في إطار فرعي لجعل الحشو يعمل بسهولة أكبر. لاحظ أنه لجعل شريط التمرير الأفقي مفيد يحتاج منطقة النص إلى التفاف = لا شيء؛ وإلا فإنك قد تستخدم أيضا Widget سهل "ScrolledText" من Tkinter.scrolledText وتخطي شريط التمرير الأفقي.

لقد قمت الآن بربط الأشياء قليلا للسماح بتغيير حجمها، مع الحد الأدنى للحجم الذي يوضح الأزرار العليا - راجع استخدامات Minsize and Row / Collemconfigure.

راجع للشغل، يبدو أن المتغيرات الخاصة بك لا يتم سحبها من أي مكان - هل هذا متعمد؟

from tkinter import *

class App:
    def __init__(self, parent):
        self.__setup_gui(parent) # Call Helper
        parent.title('To be changed')

    def __setup_gui(self, parent):

        # First Row
        self.rowframe = Frame(parent)
        self.rowframe.grid()
        self.cs_label = Label(self.rowframe, text='Change Set: ')
        self.cs_label.grid(row=0, column=0, padx=2, pady=2)

        self.cs_val = Entry(self.rowframe, width=10)
        self.cs_val.grid(row=0, column=1, padx=2, pady=2)

        self.get_button = Button(self.rowframe, text='Get', command=self.get_content)
        self.get_button.grid(row=0, column=2, padx=2, pady=2)
        parent.update_idletasks()
        parent.minsize(width=self.rowframe.winfo_width(), height=self.rowframe.winfo_height())

        # Text area and scrollbars
        self.textframe = Frame(parent)
        self.textframe.grid(row=1, columnspan=2, padx=2, pady=2, sticky=N+S+E+W)

        self.hscroll = Scrollbar(self.textframe, orient=HORIZONTAL)
        self.vscroll = Scrollbar(self.textframe)
        self.text_area = Text(self.textframe, height=10, width=50, wrap=NONE, background='white', yscrollcommand=self.vscroll.set, xscrollcommand=self.hscroll.set)
        self.text_area.grid(row=0, column=0, sticky=N+S+E+W)
        self.hscroll.config(command=self.text_area.xview)
        self.hscroll.grid(row=1, column=0, sticky=E+W)
        self.vscroll.config(command=self.text_area.yview)
        self.vscroll.grid(row=0, column=1, sticky=N+S)

        # Row 0 defaults to 0
        parent.rowconfigure(1, weight=1)
        parent.columnconfigure(1, weight=1)

        # Textarea setup
        self.textframe.rowconfigure(0, weight=1)
        self.textframe.columnconfigure(0, weight=1)


        self.clipboard_var = IntVar()
        self.notepad_var = IntVar()

    def get_content(self):
        print(self.clipboard_var.get())
        print(self.notepad_var.get())

###################################################################################################

if __name__ == '__main__':
    root = Tk()
    app = App(root)
    root.mainloop()

الآن، كل ما قال ... قد تحصل على المزيد من الاستئناف المرئي مع Pygtk أو Pyqt أو Wxpython، على الرغم من أن TQINTER القادم "Standard" هو ميزة رائعة.

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