diff --git a/Lib/lib-tk/Tkinter.py b/Lib/lib-tk/Tkinter.py
index d714a90..de2873f 100644
--- a/Lib/lib-tk/Tkinter.py
+++ b/Lib/lib-tk/Tkinter.py
@@ -1931,6 +1931,8 @@
             cnf = _cnfmerge((cnf, kw))
         self.widgetName = widgetName
         BaseWidget._setup(self, master, cnf)
+        if self._tclCommands is None:
+            self._tclCommands = []
         classes = []
         for k in cnf.keys():
             if type(k) is ClassType:
@@ -2668,20 +2670,20 @@
         """Add separator at INDEX."""
         self.insert(index, 'separator', cnf or kw)
     def delete(self, index1, index2=None):
-        """Delete menu items between INDEX1 and INDEX2 (not included)."""
+        """Delete menu items between INDEX1 and INDEX2 (included)."""
         if index2 is None:
             index2 = index1
-        cmds = []
-        (num_index1, num_index2) = (self.index(index1), self.index(index2))
-        if (num_index1 is not None) and (num_index2 is not None):
-            for i in range(num_index1, num_index2 + 1):
-                if 'command' in self.entryconfig(i):
-                    c = str(self.entrycget(i, 'command'))
-                    if c in self._tclCommands:
-                        cmds.append(c)
+
+        num_index1, num_index2 = self.index(index1), self.index(index2)
+        if (num_index1 is None) or (num_index2 is None):
+            num_index1, num_index2 = 0, -1
+
+        for i in range(num_index1, num_index2 + 1):
+            if 'command' in self.entryconfig(i):
+                c = str(self.entrycget(i, 'command'))
+                if c:
+                    self.deletecommand(c)
         self.tk.call(self._w, 'delete', index1, index2)
-        for c in cmds:
-            self.deletecommand(c)
     def entrycget(self, index, option):
         """Return the resource value of an menu item for OPTION at INDEX."""
         return self.tk.call(self._w, 'entrycget', index, '-' + option)
diff --git a/Misc/NEWS b/Misc/NEWS
index c8651c1..4c45e4f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -97,6 +97,9 @@
 Library
 -------
 
+- Issue #3774: Fixed an error when create a Tkinter menu item without command
+  and then remove it.
+
 - Assigning methods to ctypes.Structure and ctypes.Union subclasses
   after creation of the class does now work correctly.  See Issue #1700288.
 
