python अजगर QtGui कैलेंडर विजेट कॉल बटन



calendar widget (1)

इतना आसान नही। समस्या यह है कि आप दो जीयूआई पुस्तकालयों को मिलाते हैं इसलिए यह आवश्यक है कि दो मुख्य इवेंट लूप (कम से कम): एक Tkinter कोड के लिए और एक Tkinter कोड के लिए।
आप जो करना चाहते हैं, का एक तरीका - calendar.py को विभिन्न थ्रेड में चलाने के लिए subprocess और threading मॉड्यूल का उपयोग करना। उदाहरण:

from tkinter import *
from tkinter import ttk

import subprocess
import threading

master = Tk()

def callback():
    subprocess.call('python calendar.py')


b=ttk.Button(master, width=4, text="Cal", command=lambda:threading.Thread(target=callback).start()).grid(column=3,row=1, sticky=W)


mainloop()

एक अन्य तरीका - कॉलबैक फ़ंक्शन (गंदी समाधान) के अंदर क्यूटी मुख्य इवेंट लूप बना रहा है:

from tkinter import *
from tkinter import ttk
from calendar import Calendar
import sys
from PyQt4 import QtGui

master = Tk()

def callback():
    app = QtGui.QApplication(sys.argv)
    gui = Calendar()
    gui.show()
    app.exec_()


b=ttk.Button(master, width=4, text="Cal", command=callback).grid(column=3,row=1, sticky=W)

mainloop()

संपादित करें: विजेट कैसे कॉल करें सबसे पहले, इस उत्तर को देखें, और अपने ttkcalendar.py को कल्गैनिक सुझाव के रूप में संशोधित करें। फिर कोशिश करें:

from tkinter import *
from tkinter import ttk
from ttkcalendar import Calendar
import calendar

master = Tk()

def callback():
    root2=Toplevel(master)
    ttkcal = Calendar(root2,firstweekday=calendar.SUNDAY)
    ttkcal.pack(expand=1, fill='both')
    root2.update()
    root2.minsize(root2.winfo_reqwidth(), root2.winfo_reqheight())

b=ttk.Button(master, width=4, text="Cal", command=callback).grid(column=3,row=1, sticky=W)

mainloop()

संपादित करें 2. समस्याओं का समाधान करना
ठीक है, ऐसा लगता है कि मुझे सारी समस्याएं मिल रही हैं

  1. असल में, आप दो बार समान मॉड्यूल आयात करते हैं - मानक कैलेंडर मॉड्यूल:

    from calendar import Calendar
    import calendar

लेकिन आप टीटीके Calendar मॉड्यूल से क्लास Calendar को आयात नहीं करते हैं (इसे यहां वर्णित अनुसार बदलना न भूलें)। इसलिए, आयात इस तरह दिखना चाहिए:

import ttkcalendar
import calendar

कैलेंडर बनाना (मैंने कोड को स्पष्टता के लिए थोड़ा बदल दिया है):

ttkcal = ttkcalendar.Calendar(root2,firstweekday=calendar.SUNDAY)
  1. आपके कोड में, मुख्य विंडो को दो बार आरंभ किया जाता है:
    रेखा 15: master = Tk()
    रेखा 960: root = Tk()
    आपको पहले आरम्भिकरण को हटाने की आवश्यकता है

  2. आप एक ही मास्टर विंडो में pack() और grid() मिश्रण करते हैं डॉक्स के अनुसार, यह एक बुरा विचार है:

चेतावनी: एक ही मास्टर विंडो में कभी भी ग्रिड और पैक को मिक्स नहीं करें Tkinter खुशी से अपने जीवन भर के एक समाधान है कि दोनों प्रबंधकों के साथ खुश हैं बातचीत करने की कोशिश कर खर्च करेंगे प्रतीक्षा करने के बजाय, एप्लिकेशन को मार डालो और अपने कोड पर एक और नज़र डालें। एक सामान्य गलती कुछ विगेट्स के गलत पैतृक का उपयोग करना है

इसलिए, बजाय nb.pack(fill='both', expand='yes') आपको इस nb.grid(column=0, row=0, sticky=(W, E)) तरह कुछ लिखना होगा।

अंत में, यहां निश्चित कोड के लिंक हैं:

ttkcalendar.py (पहले से संशोधित, उपयोग के लिए तैयार):
https://gist.github.com/anonymous/5e0d973f57e185572df2

वर्णित संशोधनों के साथ आपकी स्क्रिप्ट:
https://gist.github.com/anonymous/65cb808dc64e414c0c12

https://code.i-harness.com

मैं अजगर के लिए एक कैलेंडर विजेट का उपयोग कर रहा हूँ। और जब बटन क्लिक किया जाता है तो मुझे विजेट को कॉल करना पड़ता है। स्थिति यह है कि मैं नहीं देख सकता कि कैलकुलेटर वर्ग में वह विधि क्या है जो विजेट को प्रदर्शित करती है। कैलेंडर वर्ग यहां से लिया गया था: http://www.eurion.net/python-snippets/snippet/Calendar_Date%20picker.html

यहां मेरा आयात है:

from tkinter import *
from tkinter import ttk
import tkinter.messagebox
import time
import requests #needs to be installed
import pymysql #needs to be installed
import csv 
import win32com.client #needs to be installed
from calendar import Calendar
import datetime

यहां बटन निर्माण किया गया है:

# Calendar Buttons
calBut=ttk.Button(f2, width=4, text="Cal",       command=Calendar.what_method?).grid(column=3,row=1, sticky=W)

जहाँ तक मुझे पता है, मैं कैलेंडर वर्ग में स्थित विजेट प्रदर्शन विधि को कॉल करने के लिए बस बटन की कमान सेट कर सकता हूं। हर बार जब मेरा बटन क्लिक किया जाता है, तो कैलेंडर विजेट को प्रदर्शित करने वाली विधि कैसे प्राप्त करें? प्रदर्शित होने वाले में से कोई भी विजेट प्रदर्शित नहीं कर रहा है

Python 3.3.5 का उपयोग कर स्पाइडर WinPython 3.3.5

** संपादित करें **

कार्यक्रम के टैब हैं और एफ 2 टैब को इंगित करता है जहां बटन होगा।

from tkinter import *
from tkinter import ttk
import tkinter.messagebox
import time
import requests #needs to be installed
import pymysql #needs to be installed
import csv 
import win32com.client #needs to be installed
import datetime
from calendar import Calendar
import calendar


#################################
# Create Button Click Calendar

 def callback():
    root2=Toplevel(f2)
    ttkcal = Calendar(root2,firstweekday=calendar.SUNDAY)
    ttkcal.pack(expand=1, fill='both')
    root2.update()
    root2.minsize(root2.winfo_reqwidth(), root2.winfo_reqheight())



 # Calendar Buttons

 b=ttk.Button(f2, width=4, text="Cal", command=callback).grid(column=3,row=1, sticky=W)

जब मैं बटन दबाता हूँ, यह कैलेंडर विंडो खोलता है, लेकिन यह खाली है। और कंसोल मुझे त्रुटि देता है:

TypeError: __init__() got multiple values for argument 'firstweekday

धन्यवाद





qtgui